This is the mail archive of the
systemtap@sourceware.org
mailing list for the systemtap project.
[Bug kprobes/2452] New: kretprobe spinlock recursive remove
- From: "bibo dot mao at intel dot com" <sourceware-bugzilla at sourceware dot org>
- To: systemtap at sources dot redhat dot com
- Date: 13 Mar 2006 06:23:27 -0000
- Subject: [Bug kprobes/2452] New: kretprobe spinlock recursive remove
- Reply-to: sourceware-bugzilla at sourceware dot org
In new linux kernel version, kretprobe in IA32 is implemented in
kretprobe_trampoline. And probepoint is removed from kretprobe_trampoline,
instead trampoline_handler is called directly.
Currently if kretprobe hander hit one trap which causes another kretprobe, there
will be SPINLOCK recursive bug. This patch fixes this, and will skip trap during
kretprobe handler execution.
And the test case is the same in
http://sourceware.org/bugzilla/show_bug.cgi?id=2071.
--- 2.6.16-rc6-mm1.org/arch/i386/kernel/kprobes.c 2006-03-13 12:25:15.000000000
+0800
+++ 2.6.16-rc6-mm1/arch/i386/kernel/kprobes.c 2006-03-13 11:38:26.000000000 +0800
@@ -389,9 +389,11 @@ fastcall void *__kprobes trampoline_hand
/* another task is sharing our hash bucket */
continue;
- if (ri->rp && ri->rp->handler)
+ if (ri->rp && ri->rp->handler){
+ __get_cpu_var(current_kprobe) = &ri->rp->kp;
ri->rp->handler(ri, regs);
-
+ __get_cpu_var(current_kprobe) = NULL;
+ }
orig_ret_address = (unsigned long)ri->ret_addr;
recycle_rp_inst(ri);
--
Summary: kretprobe spinlock recursive remove
Product: systemtap
Version: unspecified
Status: NEW
Severity: normal
Priority: P2
Component: kprobes
AssignedTo: systemtap at sources dot redhat dot com
ReportedBy: bibo dot mao at intel dot com
http://sourceware.org/bugzilla/show_bug.cgi?id=2452
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.