Commit 9ed5df69 authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman

powerpc/kprobes: Use probe_address() to read instructions

In order to avoid Oopses, use probe_address() to read the
instruction at the address where the trap happened.
Signed-off-by: default avatarChristophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/7f24b5961a6839ff01df792816807f74ff236bf6.1582567319.git.christophe.leroy@c-s.fr
parent 08b1add1
...@@ -287,14 +287,18 @@ int kprobe_handler(struct pt_regs *regs) ...@@ -287,14 +287,18 @@ int kprobe_handler(struct pt_regs *regs)
p = get_kprobe(addr); p = get_kprobe(addr);
if (!p) { if (!p) {
if (*addr != BREAKPOINT_INSTRUCTION) { unsigned int instr;
if (probe_kernel_address(addr, instr))
goto no_kprobe;
if (instr != BREAKPOINT_INSTRUCTION) {
/* /*
* PowerPC has multiple variants of the "trap" * PowerPC has multiple variants of the "trap"
* instruction. If the current instruction is a * instruction. If the current instruction is a
* trap variant, it could belong to someone else * trap variant, it could belong to someone else
*/ */
kprobe_opcode_t cur_insn = *addr; if (is_trap(instr))
if (is_trap(cur_insn))
goto no_kprobe; goto no_kprobe;
/* /*
* The breakpoint instruction was removed right * The breakpoint instruction was removed right
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment