Re: [PATCH v2 02/21] arm64: entry: Only check for stack overflow on exceptions from EL1
From: Jinjie Ruan
Date: Thu Oct 08 2026 - 02:55:09 EST
在 2026/9/19 0:13, Will Deacon 写道:
> 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@xxxxxxx>
> Signed-off-by: Will Deacon <will@xxxxxxxxxx>
> ---
> 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
LGTM
Reviewed-by: Jinjie Ruan <ruanjinjie@xxxxxxxxxx>
> .org .Lventry_start\@ + 128 // Did we overflow the ventry slot?
> .endm
>
--
Best regards,
Jinjie