From 332adfc367c0b927e3cb32790cf8f841ccb660d2 Mon Sep 17 00:00:00 2001 From: Vyacheslav Cherkashin Date: Wed, 24 Jul 2013 15:41:00 +0400 Subject: [PATCH] [FIX] kretprobe_trampoline() for x86 --- kprobe/arch/asm-x86/dbi_kprobes.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/kprobe/arch/asm-x86/dbi_kprobes.c b/kprobe/arch/asm-x86/dbi_kprobes.c index 051c47a..45a5a5e 100644 --- a/kprobe/arch/asm-x86/dbi_kprobes.c +++ b/kprobe/arch/asm-x86/dbi_kprobes.c @@ -146,11 +146,11 @@ static __used void kretprobe_trampoline_holder(void) asm volatile(".global kretprobe_trampoline\n" "kretprobe_trampoline:\n" " pushf\n" - /* skip cs, eip, orig_eax */ - " subl $12, %esp\n" + /* skip cs, ip, orig_ax and gs. */ + " subl $16, %esp\n" " pushl %fs\n" - " pushl %ds\n" " pushl %es\n" + " pushl %ds\n" " pushl %eax\n" " pushl %ebp\n" " pushl %edi\n" @@ -161,10 +161,10 @@ static __used void kretprobe_trampoline_holder(void) " movl %esp, %eax\n" " call trampoline_probe_handler_x86\n" /* move eflags to cs */ - " movl 52(%esp), %edx\n" - " movl %edx, 48(%esp)\n" - /* save true return address on eflags */ - " movl %eax, 52(%esp)\n" + " movl 56(%esp), %edx\n" + " movl %edx, 52(%esp)\n" + /* replace saved flags with true return address. */ + " movl %eax, 56(%esp)\n" " popl %ebx\n" "" " popl %ecx\n" " popl %edx\n" -- 2.7.4