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

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
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -287,14 +287,18 @@ int kprobe_handler(struct pt_regs *regs)

	p = get_kprobe(addr);
	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"
			 * instruction. If the current instruction is a
			 * trap variant, it could belong to someone else
			 */
			kprobe_opcode_t cur_insn = *addr;
			if (is_trap(cur_insn))
			if (is_trap(instr))
				goto no_kprobe;
			/*
			 * The breakpoint instruction was removed right