| From: Masami Hiramatsu <mhiramat@kernel.org> |
| Date: Sun, 13 May 2018 05:04:16 +0100 |
| Subject: ARM: 8771/1: kprobes: Prohibit kprobes on do_undefinstr |
| |
| commit eb0146daefdde65665b7f076fbff7b49dade95b9 upstream. |
| |
| Prohibit kprobes on do_undefinstr because kprobes on |
| arm is implemented by undefined instruction. This means |
| if we probe do_undefinstr(), it can cause infinit |
| recursive exception. |
| |
| Fixes: 24ba613c9d6c ("ARM kprobes: core code") |
| Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> |
| Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| arch/arm/kernel/traps.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| --- a/arch/arm/kernel/traps.c |
| +++ b/arch/arm/kernel/traps.c |
| @@ -19,6 +19,7 @@ |
| #include <linux/uaccess.h> |
| #include <linux/hardirq.h> |
| #include <linux/kdebug.h> |
| +#include <linux/kprobes.h> |
| #include <linux/module.h> |
| #include <linux/kexec.h> |
| #include <linux/bug.h> |
| @@ -392,7 +393,8 @@ void unregister_undef_hook(struct undef_ |
| raw_spin_unlock_irqrestore(&undef_lock, flags); |
| } |
| |
| -static int call_undef_hook(struct pt_regs *regs, unsigned int instr) |
| +static nokprobe_inline |
| +int call_undef_hook(struct pt_regs *regs, unsigned int instr) |
| { |
| struct undef_hook *hook; |
| unsigned long flags; |
| @@ -465,6 +467,7 @@ die_sig: |
| |
| arm_notify_die("Oops - undefined instruction", regs, &info, 0, 6); |
| } |
| +NOKPROBE_SYMBOL(do_undefinstr) |
| |
| asmlinkage void do_unexp_fiq (struct pt_regs *regs) |
| { |