diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c index bca5e04f70..c5481441a1 100644 --- a/arch/arm64/kernel/traps.c +++ b/arch/arm64/kernel/traps.c @@ -507,14 +507,20 @@ const char *esr_get_class_string(u32 esr) */ asmlinkage void bad_mode(struct pt_regs *regs, int reason, unsigned int esr) { + siginfo_t info; + void __user *pc = (void __user *)instruction_pointer(regs); console_verbose(); pr_crit("Bad mode in %s handler detected, code 0x%08x -- %s\n", handler[reason], esr, esr_get_class_string(esr)); + __show_regs(regs); - die("Oops - bad mode", regs, 0); - local_irq_disable(); - panic("bad mode"); + info.si_signo = SIGILL; + info.si_errno = 0; + info.si_code = ILL_ILLOPC; + info.si_addr = pc; + + arm64_notify_die("Oops - bad mode", regs, &info, 0); } /*