This is the mail archive of the
systemtap@sources.redhat.com
mailing list for the systemtap project.
Re: kprobes problem
- From: Prasanna S Panchamukhi <prasanna at in dot ibm dot com>
- To: Baruch Even <baruch at ev-en dot org>
- Cc: systemtap at sources dot redhat dot com, maneesh at in dot ibm dot com, varap at us dot ibm dot com
- Date: Mon, 14 Mar 2005 22:01:42 +0530
- Subject: Re: kprobes problem
- Reply-to: prasanna at in dot ibm dot com
Hi Baruch,
Thanks for pointing it out.
Yes, kprobes could not handle probes on ret/lret instruction.
The instruction pointer modification in case of ret/lret
instrcution is not required.
The below patch should fix the problem. This patch is for i386
achitecture and soon will be ported to other architectures.
Please let me know if you have any issues.
Thanks
Prasanna
Kprobes could not handle the insertion of a probe on a ret/lret instruction.
This patch fixes the above bug by avoiding adjustment of instruction pointer,
Signed-off-by: Prasanna S Panchamukhi <prasanna@in.ibm.com>
---
linux-2.6.11-rc5-prasanna/arch/i386/kernel/kprobes.c | 8 ++++++++
1 files changed, 8 insertions(+)
diff -puN arch/i386/kernel/kprobes.c~kprobes-ret-address-fix arch/i386/kernel/kprobes.c
--- linux-2.6.11-rc5/arch/i386/kernel/kprobes.c~kprobes-ret-address-fix 2005-03-14 21:27:34.000000000 +0530
+++ linux-2.6.11-rc5-prasanna/arch/i386/kernel/kprobes.c 2005-03-14 21:48:39.000000000 +0530
@@ -208,6 +208,14 @@ static void resume_execution(struct kpro
*tos &= ~(TF_MASK | IF_MASK);
*tos |= kprobe_old_eflags;
break;
+ case 0xc3: /* ret/lret */
+ case 0xcb:
+ case 0xc2:
+ case 0xca:
+ regs->eflags &= ~TF_MASK;
+ /* eip is already adjusted, no more changes required*/
+ return;
+ break;
case 0xe8: /* call relative - Fix return addr */
*tos = orig_eip + (*tos - copy_eip);
break;
_
--
Prasanna S Panchamukhi
Linux Technology Center
India Software Labs, IBM Bangalore
Ph: 91-80-25044636
<prasanna@in.ibm.com>