]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
s390/entry: Fix last breaking event handling in case of stack corruption
authorHeiko Carstens <hca@linux.ibm.com>
Thu, 24 Apr 2025 15:07:01 +0000 (17:07 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 6 Jul 2025 09:00:16 +0000 (11:00 +0200)
commit ae952eea6f4a7e2193f8721a5366049946e012e7 upstream.

In case of stack corruption stack_invalid() is called and the expectation
is that register r10 contains the last breaking event address. This
dependency is quite subtle and broke a couple of years ago without that
anybody noticed.

Fix this by getting rid of the dependency and read the last breaking event
address from lowcore.

Fixes: 56e62a737028 ("s390: convert to generic entry")
Acked-by: Ilya Leoshkevich <iii@linux.ibm.com>
Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/s390/kernel/entry.S

index ebad8c8b8c57dd755e96d719afed69bd80ff8fcf..0476ce7700dfaa416e2e170bed952bbdbe6fdb25 100644 (file)
@@ -639,7 +639,7 @@ SYM_CODE_START(stack_overflow)
        stmg    %r0,%r7,__PT_R0(%r11)
        stmg    %r8,%r9,__PT_PSW(%r11)
        mvc     __PT_R8(64,%r11),0(%r14)
-       stg     %r10,__PT_ORIG_GPR2(%r11) # store last break to orig_gpr2
+       mvc     __PT_ORIG_GPR2(8,%r11),__LC_PGM_LAST_BREAK
        xc      __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
        lgr     %r2,%r11                # pass pointer to pt_regs
        jg      kernel_stack_overflow