[GIT PULL] kprobes fixes

From: Ingo Molnar
Date: Sun Dec 09 2018 - 17:03:31 EST


Linus,

Please pull the latest perf-urgent-for-linus git tree from:

git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf-urgent-for-linus

# HEAD: a50480cb6d61d5c5fc13308479407b628b6bc1c5 kprobes/x86: Blacklist non-attachable interrupt functions

Two kprobes fixes: a blacklist fix and an instruction patching related
corruption fix.

Thanks,

Ingo

------------------>
Andrea Righi (1):
kprobes/x86: Blacklist non-attachable interrupt functions

Masami Hiramatsu (1):
kprobes/x86: Fix instruction patching corruption when copying more than one RIP-relative instruction


arch/x86/entry/entry_64.S | 4 ++++
arch/x86/kernel/kprobes/opt.c | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
index ce25d84023c0..1f0efdb7b629 100644
--- a/arch/x86/entry/entry_64.S
+++ b/arch/x86/entry/entry_64.S
@@ -566,6 +566,7 @@ ENTRY(interrupt_entry)

ret
END(interrupt_entry)
+_ASM_NOKPROBE(interrupt_entry)


/* Interrupt entry/exit. */
@@ -766,6 +767,7 @@ native_irq_return_ldt:
jmp native_irq_return_iret
#endif
END(common_interrupt)
+_ASM_NOKPROBE(common_interrupt)

/*
* APIC interrupts.
@@ -780,6 +782,7 @@ ENTRY(\sym)
call \do_sym /* rdi points to pt_regs */
jmp ret_from_intr
END(\sym)
+_ASM_NOKPROBE(\sym)
.endm

/* Make sure APIC interrupt handlers end up in the irqentry section: */
@@ -960,6 +963,7 @@ ENTRY(\sym)

jmp error_exit
.endif
+_ASM_NOKPROBE(\sym)
END(\sym)
.endm

diff --git a/arch/x86/kernel/kprobes/opt.c b/arch/x86/kernel/kprobes/opt.c
index 40b16b270656..6adf6e6c2933 100644
--- a/arch/x86/kernel/kprobes/opt.c
+++ b/arch/x86/kernel/kprobes/opt.c
@@ -189,7 +189,7 @@ static int copy_optimized_instructions(u8 *dest, u8 *src, u8 *real)
int len = 0, ret;

while (len < RELATIVEJUMP_SIZE) {
- ret = __copy_instruction(dest + len, src + len, real, &insn);
+ ret = __copy_instruction(dest + len, src + len, real + len, &insn);
if (!ret || !can_boost(&insn, src + len))
return -EINVAL;
len += ret;