[PATCH v2 02/21] arm64: entry: Only check for stack overflow on exceptions from EL1

Jinjie Ruan ruanjinjie at huawei.com
Wed Oct 7 23:54:59 PDT 2026



在 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 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

LGTM
Reviewed-by: Jinjie Ruan <ruanjinjie at huawei.com>

>  .org .Lventry_start\@ + 128	// Did we overflow the ventry slot?
>  	.endm
>  

-- 
Best regards,
Jinjie




More information about the linux-arm-kernel mailing list