[PATCH v6 30/33] arm64: entry: Align stack size for alternative
Chen Zhongjin
chenzhongjin at huawei.com
Wed Jun 22 18:49:14 PDT 2022
In kernel_exit there is a alternative branch for KPTI which causes
stack size conflict for two instruction boundaries.
To fix that, make both branch move the sp and then revert it in
tramp_exit branch.
Signed-off-by: Chen Zhongjin <chenzhongjin at huawei.com>
---
arch/arm64/kernel/entry.S | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
index d49bfbe81a0d..677e3be471bb 100644
--- a/arch/arm64/kernel/entry.S
+++ b/arch/arm64/kernel/entry.S
@@ -430,7 +430,11 @@ alternative_if_not ARM64_UNMAP_KERNEL_AT_EL0
ldr lr, [sp, #S_LR]
add sp, sp, #PT_REGS_SIZE // restore sp
eret
-alternative_else_nop_endif
+alternative_else
+ nop
+ add sp, sp, #PT_REGS_SIZE // restore sp
+ nop
+alternative_endif
#ifdef CONFIG_UNMAP_KERNEL_AT_EL0
bne 4f
msr far_el1, x29
@@ -729,6 +733,7 @@ alternative_else_nop_endif
.macro tramp_exit, regsize = 64
UNWIND_HINT_EMPTY
+ sub sp, sp, #PT_REGS_SIZE // revert sp
tramp_data_read_var x30, this_cpu_vector
get_this_cpu_offset x29
ldr x30, [x30, x29]
--
2.17.1
More information about the linux-arm-kernel
mailing list