Patch "powerpc/64s: Mask SRR0 before checking against the masked NIP" has been added to the 5.15-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/64s: Mask SRR0 before checking against the masked NIP

to the 5.15-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-64s-mask-srr0-before-checking-against-the-ma.patch
and it can be found in the queue-5.15 subdirectory.

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



commit 286b222bff3009546115e507a967084a2e963908
Author: Nicholas Piggin <npiggin@xxxxxxxxx>
Date:   Mon Jan 17 23:44:03 2022 +1000

    powerpc/64s: Mask SRR0 before checking against the masked NIP
    
    [ Upstream commit aee101d7b95a03078945681dd7f7ea5e4a1e7686 ]
    
    Commit 314f6c23dd8d ("powerpc/64s: Mask NIP before checking against
    SRR0") masked off the low 2 bits of the NIP value in the interrupt
    stack frame in case they are non-zero and mis-compare against a SRR0
    register value of a CPU which always reads back 0 from the 2 low bits
    which are reserved.
    
    This now causes the opposite problem that an implementation which does
    implement those bits in SRR0 will mis-compare against the masked NIP
    value in which they have been cleared. QEMU is one such implementation,
    and this is allowed by the architecture.
    
    This can be triggered by sigfuz by setting low bits of PT_NIP in the
    signal context.
    
    Fix this for now by masking the SRR0 bits as well. Cleaner is probably
    to sanitise these values before putting them in registers or stack, but
    this is the quick and backportable fix.
    
    Fixes: 314f6c23dd8d ("powerpc/64s: Mask NIP before checking against SRR0")
    Signed-off-by: Nicholas Piggin <npiggin@xxxxxxxxx>
    Signed-off-by: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20220117134403.2995059-1-npiggin@xxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/powerpc/kernel/interrupt_64.S b/arch/powerpc/kernel/interrupt_64.S
index 4b1ff94e67eb4..4c6d1a8dcefed 100644
--- a/arch/powerpc/kernel/interrupt_64.S
+++ b/arch/powerpc/kernel/interrupt_64.S
@@ -30,6 +30,7 @@ COMPAT_SYS_CALL_TABLE:
 	.ifc \srr,srr
 	mfspr	r11,SPRN_SRR0
 	ld	r12,_NIP(r1)
+	clrrdi  r11,r11,2
 	clrrdi  r12,r12,2
 100:	tdne	r11,r12
 	EMIT_WARN_ENTRY 100b,__FILE__,__LINE__,(BUGFLAG_WARNING | BUGFLAG_ONCE)
@@ -40,6 +41,7 @@ COMPAT_SYS_CALL_TABLE:
 	.else
 	mfspr	r11,SPRN_HSRR0
 	ld	r12,_NIP(r1)
+	clrrdi  r11,r11,2
 	clrrdi  r12,r12,2
 100:	tdne	r11,r12
 	EMIT_WARN_ENTRY 100b,__FILE__,__LINE__,(BUGFLAG_WARNING | BUGFLAG_ONCE)



[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