[Crash-utility] backtrace failure on x86_64 and x86 in 2.6.33/34 kernels due to "thread_return" removal

Dave Anderson anderson at redhat.com
Thu May 20 21:11:06 UTC 2010


----- "Dave Anderson" <anderson at redhat.com> wrote:

> I've got a fix for x86_64 -- which have always depended on the existence of
> the "thread_return" label.  But I note that x86 backtraces also are not working,
> which I'll take a look at today.
 
As it turns out, the x86 backtrace failures in 2.6.33/34 are caused by a different
kprobes-related commit, which moved the system_call assembly function to the
.kprobes.text section:

  commit a00e817f42663941ea0aa5f85a9d1c4f8b212839
  Author: Masami Hiramatsu <mhiramat at redhat.com>
  Date:   Tue Sep 8 12:47:55 2009 -0400

    kprobes/x86-32: Move irq-exit functions to kprobes section
    
    Move irq-exit functions to .kprobes.text section to protect against
    kprobes recursion.
    
    When I ran kprobe stress test on x86-32, I found below symbols
    cause unrecoverable recursive probing:
    
        ret_from_exception
        ret_from_intr
        check_userspace
        restore_all
        restore_all_notrace
        restore_nocheck
        irq_return
    
    And also, I found some interrupt/exception entry points that
    cause similar problems.
    
    This patch moves those symbols (including their container functions)
    to .kprobes.text section to prevent any kprobes probing.
    
    Signed-off-by: Masami Hiramatsu <mhiramat at redhat.com>
    Cc: Frederic Weisbecker <fweisbec at gmail.com>
    Cc: Ananth N Mavinakayanahalli <ananth at in.ibm.com>
    Cc: Jim Keniston <jkenisto at us.ibm.com>
    Cc: Ingo Molnar <mingo at elte.hu>
    LKML-Reference: <20090908164755.24050.81182.stgit at dhcp-100-2-132.bos.redhat.com>
    Signed-off-by: Frederic Weisbecker <fweisbec at gmail.com>

  ... [ snip ] ... 
  
  @@ -513,6 +521,10 @@ sysexit_audit:
          PTGS_TO_GS_EX
   ENDPROC(ia32_sysenter_target)
   
  +/*
  + * syscall stub including irq exit should be protected against kprobes
  + */
  +       .pushsection .kprobes.text, "ax"
          # system call handler stub
   ENTRY(system_call)
          RING0_INT_FRAME                 # can't unwind into user space anyway
  @@ -705,6 +717,10 @@ syscall_badsys:
          jmp resume_userspace
   END(syscall_badsys)
          CFI_ENDPROC
  +/*
  + * End of kprobes section
  + */
  +       .popsection
 
I should have a fix tomorrow (if that's the only issue)...

Dave




More information about the Crash-utility mailing list