Signed-off-by: Harvey Harrison <[EMAIL PROTECTED]> --- arch/x86/kernel/kprobes_32.c | 18 +++++++++++------- arch/x86/kernel/kprobes_64.c | 14 ++++++++++++-- 2 files changed, 23 insertions(+), 9 deletions(-)
diff --git a/arch/x86/kernel/kprobes_32.c b/arch/x86/kernel/kprobes_32.c index 2a8acd6..878b0c4 100644 --- a/arch/x86/kernel/kprobes_32.c +++ b/arch/x86/kernel/kprobes_32.c @@ -239,13 +239,7 @@ int __kprobes arch_prepare_kprobe(struct kprobe *p) if (!p->ainsn.insn) return -ENOMEM; - memcpy(p->ainsn.insn, p->addr, (MAX_INSN_SIZE + 1) * sizeof(kprobe_opcode_t)); - p->opcode = *p->addr; - if (can_boost(p->addr)) { - p->ainsn.boostable = 0; - } else { - p->ainsn.boostable = -1; - } + arch_copy_kprobe(p); return 0; } @@ -303,6 +297,15 @@ static s32 __kprobes *is_riprel(u8 *insn) static void __kprobes arch_copy_kprobe(struct kprobe *p) { +#ifdef CONFIG_X86_32 + memcpy(p->ainsn.insn, p->addr, (MAX_INSN_SIZE + 1) * sizeof(kprobe_opcode_t)); + p->opcode = *p->addr; + if (can_boost(p->addr)) { + p->ainsn.boostable = 0; + } else { + p->ainsn.boostable = -1; + } +#else s32 *ripdisp; memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE); ripdisp = is_riprel(p->ainsn.insn); @@ -325,6 +328,7 @@ static void __kprobes arch_copy_kprobe(struct kprobe *p) *ripdisp = disp; } p->opcode = *p->addr; +#endif } void __kprobes arch_arm_kprobe(struct kprobe *p) diff --git a/arch/x86/kernel/kprobes_64.c b/arch/x86/kernel/kprobes_64.c index 5f02e75..b437f7a 100644 --- a/arch/x86/kernel/kprobes_64.c +++ b/arch/x86/kernel/kprobes_64.c @@ -245,9 +245,9 @@ int __kprobes arch_prepare_kprobe(struct kprobe *p) { /* insn: must be on special executable page on x86_32|64. */ p->ainsn.insn = get_insn_slot(); - if (!p->ainsn.insn) { + if (!p->ainsn.insn) return -ENOMEM; - } + arch_copy_kprobe(p); return 0; } @@ -306,6 +306,15 @@ static s32 __kprobes *is_riprel(u8 *insn) static void __kprobes arch_copy_kprobe(struct kprobe *p) { +#ifdef CONFIG_X86_32 + memcpy(p->ainsn.insn, p->addr, (MAX_INSN_SIZE + 1) * sizeof(kprobe_opcode_t)); + p->opcode = *p->addr; + if (can_boost(p->addr)) { + p->ainsn.boostable = 0; + } else { + p->ainsn.boostable = -1; + } +#else s32 *ripdisp; memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE); ripdisp = is_riprel(p->ainsn.insn); @@ -328,6 +337,7 @@ static void __kprobes arch_copy_kprobe(struct kprobe *p) *ripdisp = disp; } p->opcode = *p->addr; +#endif } void __kprobes arch_arm_kprobe(struct kprobe *p) -- 1.5.4.rc0.1083.gf568 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/