From efa80313ccc399ab45e46055b4be6e73e9666255 Mon Sep 17 00:00:00 2001 From: Mifacopy Date: Sun, 28 Dec 2025 16:27:23 +0800 Subject: [PATCH] arm64: don't kill the kernel on a bad esr from el0 --- arch/arm64/kernel/traps.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) 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); } /*