Patch "powerpc/traps: do not enable irqs in _exception" has been added to the 5.14-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    powerpc/traps: do not enable irqs in _exception

to the 5.14-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     powerpc-traps-do-not-enable-irqs-in-_exception.patch
and it can be found in the queue-5.14 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 9d8f64c8b2a91cd43d0f6d0c35a3540c04d47868
Author: Nicholas Piggin <npiggin@xxxxxxxxx>
Date:   Tue Oct 5 00:56:39 2021 +1000

    powerpc/traps: do not enable irqs in _exception
    
    [ Upstream commit d0afd44c05f8f4e4c91487c02d43c87a31552462 ]
    
    _exception can be called by machine check handlers when the MCE hits
    user code (e.g., pseries and powernv). This will enable local irqs
    because, which is a dicey thing to do in NMI or hard irq context.
    
    This seemed to worked out okay because a userspace MCE can basically be
    treated like a synchronous interrupt (after async / imprecise MCEs are
    filtered out). Since NMI and hard irq handlers have started growing
    nmi_enter / irq_enter, and more irq state sanity checks, this has
    started to cause problems (or at least trigger warnings).
    
    The Fixes tag to the commit which introduced this rather than try to
    work out exactly which commit was the first that could possibly cause a
    problem because that may be difficult to prove.
    
    Fixes: 9f2f79e3a3c1 ("powerpc: Disable interrupts in 64-bit kernel FP and vector faults")
    Signed-off-by: Nicholas Piggin <npiggin@xxxxxxxxx>
    Signed-off-by: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20211004145642.1331214-3-npiggin@xxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index d56254f05e17..4ac85ab15ad7 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -341,10 +341,16 @@ static bool exception_common(int signr, struct pt_regs *regs, int code,
 		return false;
 	}
 
-	show_signal_msg(signr, regs, code, addr);
+	/*
+	 * Must not enable interrupts even for user-mode exception, because
+	 * this can be called from machine check, which may be a NMI or IRQ
+	 * which don't like interrupts being enabled. Could check for
+	 * in_hardirq || in_nmi perhaps, but there doesn't seem to be a good
+	 * reason why _exception() should enable irqs for an exception handler,
+	 * the handlers themselves do that directly.
+	 */
 
-	if (arch_irqs_disabled())
-		interrupt_cond_local_irq_enable(regs);
+	show_signal_msg(signr, regs, code, addr);
 
 	current->thread.trap_nr = code;
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux