[PATCH 02/21] arm64: entry: Only check for stack overflow on exceptions from EL1
Will Deacon
will at kernel.org
Mon Sep 7 09:42:27 PDT 2026
Checking for kernel stack overflow on entry from EL0 is largely
pointless and gets in the way of using SPSel to switch to the overflow
stack. If the kernel stack overflows on entry from userspace, that
implies that it was unbalanced on the last exception return which means
we can't sensibly reason about the state of the system given that we
could've returned to an arbitrary virtual address in an arbitrary mode.
Remove the stack overflow check from the EL0 exception entry path.
Cc: Mark Rutland <mark.rutland at arm.com>
Signed-off-by: Will Deacon <will at kernel.org>
---
arch/arm64/kernel/entry.S | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
index 59f045e496ec..b5d8277f608a 100644
--- a/arch/arm64/kernel/entry.S
+++ b/arch/arm64/kernel/entry.S
@@ -54,6 +54,8 @@
.endif
sub sp, sp, #PT_REGS_SIZE
+
+ .if \el == 1
/*
* Test whether the SP has overflowed, without corrupting a GPR.
* Task and IRQ stacks are aligned so that SP & (1 << THREAD_SHIFT)
@@ -64,8 +66,11 @@
tbnz x0, #THREAD_SHIFT, 0f
sub x0, sp, x0 // x0'' = sp' - x0' = (sp + x0) - sp = x0
sub sp, sp, x0 // sp'' = sp' - x0 = (sp + x0) - x0 = sp
+ .endif
+
b el\el\ht\()_\regsize\()_\label
+ .if \el == 1
0:
/*
* Either we've just detected an overflow, or we've taken an exception
@@ -96,6 +101,7 @@
sub sp, sp, x0
mrs x0, tpidrro_el0
b el\el\ht\()_\regsize\()_\label
+ .endif
.org .Lventry_start\@ + 128 // Did we overflow the ventry slot?
.endm
--
2.55.0.979.g7e5102b832-goog
More information about the linux-arm-kernel
mailing list