From 4b77b4626d9dc1ad0ee3c5671a6075e9cd5a3e25 Mon Sep 17 00:00:00 2001 From: Masami Hiramatsu Date: Thu, 27 Apr 2006 18:39:55 -0700 Subject: [PATCH] --- yaml --- r: 26287 b: refs/heads/master c: bcff5cd667da6eb3df9173626497e3e69b004e42 h: refs/heads/master i: 26285: 5987dbb879126c0dd1c4979798cabe22cc8563d7 26283: 1018cacd917475e690466b4066b28eab36bf1cca 26279: 8177729d8537ed35a423fc1587435909b90056f5 26271: 0a78015149e67c9f8c420240c74392f44d096277 v: v3 --- [refs] | 2 +- trunk/arch/i386/kernel/kprobes.c | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index be3b8ac8eff6..8aecd452b04e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: bf661987da6f5131475dfe3f51a98de4e2589ed3 +refs/heads/master: bcff5cd667da6eb3df9173626497e3e69b004e42 diff --git a/trunk/arch/i386/kernel/kprobes.c b/trunk/arch/i386/kernel/kprobes.c index 6c93ddf09512..38806f427849 100644 --- a/trunk/arch/i386/kernel/kprobes.c +++ b/trunk/arch/i386/kernel/kprobes.c @@ -443,10 +443,11 @@ static void __kprobes resume_execution(struct kprobe *p, *tos &= ~(TF_MASK | IF_MASK); *tos |= kcb->kprobe_old_eflags; break; - case 0xc3: /* ret/lret */ - case 0xcb: - case 0xc2: + case 0xc2: /* iret/ret/lret */ + case 0xc3: case 0xca: + case 0xcb: + case 0xcf: case 0xea: /* jmp absolute -- eip is correct */ /* eip is already adjusted, no more changes required */ p->ainsn.boostable = 1; @@ -454,10 +455,13 @@ static void __kprobes resume_execution(struct kprobe *p, case 0xe8: /* call relative - Fix return addr */ *tos = orig_eip + (*tos - copy_eip); break; + case 0x9a: /* call absolute -- same as call absolute, indirect */ + *tos = orig_eip + (*tos - copy_eip); + goto no_change; case 0xff: if ((p->ainsn.insn[1] & 0x30) == 0x10) { - /* call absolute, indirect */ /* + * call absolute, indirect * Fix return addr; eip is correct. * But this is not boostable */