From 4c3b98d31d94d242d5ebb9337a5383b6123c4653 Mon Sep 17 00:00:00 2001 From: Harvey Harrison Date: Wed, 30 Jan 2008 13:32:16 +0100 Subject: [PATCH] --- yaml --- r: 80116 b: refs/heads/master c: 31f80e45ea26008939790b4363a4fdcff240e0d6 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/x86/kernel/kprobes.c | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 65ec4bfb4ba5..28ddab9180c3 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9930927f36ac3e39ffa674dc23ef06f13c39cef7 +refs/heads/master: 31f80e45ea26008939790b4363a4fdcff240e0d6 diff --git a/trunk/arch/x86/kernel/kprobes.c b/trunk/arch/x86/kernel/kprobes.c index b1804e40235d..80bcb7635465 100644 --- a/trunk/arch/x86/kernel/kprobes.c +++ b/trunk/arch/x86/kernel/kprobes.c @@ -263,15 +263,16 @@ static int __kprobes is_IF_modifier(kprobe_opcode_t *insn) return 0; } -#ifdef CONFIG_X86_64 /* * Adjust the displacement if the instruction uses the %rip-relative * addressing mode. * If it does, Return the address of the 32-bit displacement word. * If not, return null. + * Only applicable to 64-bit x86. */ static void __kprobes fix_riprel(struct kprobe *p) { +#ifdef CONFIG_X86_64 u8 *insn = p->ainsn.insn; s64 disp; int need_modrm; @@ -335,15 +336,15 @@ static void __kprobes fix_riprel(struct kprobe *p) *(s32 *)insn = (s32) disp; } } -} #endif +} static void __kprobes arch_copy_kprobe(struct kprobe *p) { memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t)); -#ifdef CONFIG_X86_64 + fix_riprel(p); -#endif + if (can_boost(p->addr)) p->ainsn.boostable = 0; else