This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] kprobes: Fix return probes on sys_execve


This patch against 2.6.15-rc2 fixes a bug in kprobes that can cause
an Oops or even a crash when a return probe is installed on one
of the following functions: sys_execve, do_execve, load_*_binary,
flush_old_exec, or flush_thread.  The fix is to remove the call to
kprobe_flush_task() in flush_thread().  This fix has been tested on all
architectures for which the return-probes feature has been implemented
(i386, x86_64, ppc64, ia64).  Please apply.

BACKGROUND
Up to now, we have called kprobe_flush_task() under two situations:
when a task exits, and when it execs.  Flushing kretprobe_instances on
exit is correct because (a) do_exit() doesn't return, and (b) one or
more return-probed functions may be active when a task calls do_exit().
Neither is the case for sys_execve() and its callees.

Initially, the mistaken call to kprobe_flush_task() on exec was
harmless because we put the "real" return address of each active
probed function back in the stack, just to be safe, when we recycled
its kretprobe_instance.  When support for ppc64 and ia64 was added,
this safety measure couldn't be employed, and was eventually dropped
even for i386 and x86_64.  sys_execve() and its callees were informally
blacklisted for return probes until this fix was developed.

Acked-by: Prasanna S Panchamukhi <prasanna@in.ibm.com>
Signed-off-by: Jim Keniston <jkenisto@us.ibm.com>


Attachment: kretprobes-exec.patch
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]