[Crash-utility] backtrace failure on x86_64 and x86 in 2.6.33/34 kernels due to "thread_return" removal
Masami Hiramatsu
mhiramat at redhat.com
Thu May 20 22:05:10 UTC 2010
Hi Dave,
Are these issues only for crash tools? or it occurs in kernel func-backtrace too?
And how would you fix it?
Thank you,
Dave Anderson wrote:
>
> ----- "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
--
Masami Hiramatsu
e-mail: mhiramat at redhat.com
More information about the Crash-utility
mailing list