powerpc/mce: ensure machine check handler always tests RI
authorNicholas Piggin <npiggin@gmail.com>
Sat, 30 Jan 2021 13:08:34 +0000 (23:08 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 8 Feb 2021 13:02:11 +0000 (00:02 +1100)
A machine check that is handled must still check MSR[RI] for
recoverability of the interrupted context. Without this patch
it's possible for a handled machine check to return to a
context where it has clobbered live registers.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210130130852.2952424-25-npiggin@gmail.com
arch/powerpc/kernel/traps.c

index f9ef183..3a86999 100644 (file)
@@ -846,11 +846,11 @@ void machine_check_exception(struct pt_regs *regs)
 
        die_mce("Machine check", regs, SIGBUS);
 
+bail:
        /* Must die if the interrupt is not recoverable */
        if (!(regs->msr & MSR_RI))
                die_mce("Unrecoverable Machine check", regs, SIGBUS);
 
-bail:
        if (nmi) nmi_exit();
 }
 NOKPROBE_SYMBOL(machine_check_exception);