Skip to content

Commit

Permalink
tracing, x86: fix fixup section to return to original code
Browse files Browse the repository at this point in the history
Impact: fix to prevent a kernel crash on fault

If for some reason the pointer to the parent function on the
stack takes a fault, the fix up code will not return back to
the original faulting code. This can lead to unpredictable
results and perhaps even a kernel panic.

A fault should not happen, but if it does, we should simply
disable the tracer, warn, and continue running the kernel.
It should not lead to a kernel crash.

Signed-off-by: Steven Rostedt <srostedt@redhat.com>
  • Loading branch information
Steven Rostedt committed Feb 10, 2009
1 parent acd8957 commit e3944bf
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions arch/x86/kernel/ftrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -491,13 +491,15 @@ void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr)
"1: " _ASM_MOV " (%[parent_old]), %[old]\n"
"2: " _ASM_MOV " %[return_hooker], (%[parent_replaced])\n"
" movl $0, %[faulted]\n"
"3:\n"

".section .fixup, \"ax\"\n"
"3: movl $1, %[faulted]\n"
"4: movl $1, %[faulted]\n"
" jmp 3b\n"
".previous\n"

_ASM_EXTABLE(1b, 3b)
_ASM_EXTABLE(2b, 3b)
_ASM_EXTABLE(1b, 4b)
_ASM_EXTABLE(2b, 4b)

: [parent_replaced] "=r" (parent), [old] "=r" (old),
[faulted] "=r" (faulted)
Expand Down

0 comments on commit e3944bf

Please sign in to comment.