hulk inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/I80QRY CVE: NA
--------------------------------
This reverts commit d63c76835476f9cb183af549d790dc7893cd07b8.
Signed-off-by: Wei Li liwei391@huawei.com --- arch/arm64/include/asm/efi.h | 3 --- arch/arm64/kernel/efi-rt-wrapper.S | 13 +------------ arch/arm64/kernel/efi.c | 28 ---------------------------- 3 files changed, 1 insertion(+), 43 deletions(-)
diff --git a/arch/arm64/include/asm/efi.h b/arch/arm64/include/asm/efi.h index 9e780a68883c..d3cb42fd51ec 100644 --- a/arch/arm64/include/asm/efi.h +++ b/arch/arm64/include/asm/efi.h @@ -25,7 +25,6 @@ int efi_set_mapping_permissions(struct mm_struct *mm, efi_memory_desc_t *md); ({ \ efi_virtmap_load(); \ __efi_fpsimd_begin(); \ - spin_lock(&efi_rt_lock); \ })
#define arch_efi_call_virt(p, f, args...) \ @@ -37,12 +36,10 @@ int efi_set_mapping_permissions(struct mm_struct *mm, efi_memory_desc_t *md);
#define arch_efi_call_virt_teardown() \ ({ \ - spin_unlock(&efi_rt_lock); \ __efi_fpsimd_end(); \ efi_virtmap_unload(); \ })
-extern spinlock_t efi_rt_lock; efi_status_t __efi_rt_asm_wrapper(void *, const char *, ...);
#define ARCH_EFI_IRQ_FLAGS_MASK (PSR_D_BIT | PSR_A_BIT | PSR_I_BIT | PSR_F_BIT) diff --git a/arch/arm64/kernel/efi-rt-wrapper.S b/arch/arm64/kernel/efi-rt-wrapper.S index 27e946550bbc..e02329e79ee1 100644 --- a/arch/arm64/kernel/efi-rt-wrapper.S +++ b/arch/arm64/kernel/efi-rt-wrapper.S @@ -19,12 +19,6 @@ ENTRY(__efi_rt_asm_wrapper) */ stp x1, x18, [sp, #16]
- ldr_l x16, efi_rt_stack_top - mov sp, x16 -#ifdef CONFIG_SHADOW_CALL_STACK - str x18, [sp, #-16]! -#endif - /* * We are lucky enough that no EFI runtime services take more than * 5 arguments, so all are passed in registers rather than via the @@ -38,7 +32,6 @@ ENTRY(__efi_rt_asm_wrapper) mov x4, x6 blr x8
- mov sp, x29 ldp x1, x2, [sp, #16] cmp x2, x18 ldp x29, x30, [sp], #32 @@ -52,10 +45,6 @@ ENTRY(__efi_rt_asm_wrapper) * called with preemption disabled and a separate shadow stack is used * for interrupts. */ -#ifdef CONFIG_SHADOW_CALL_STACK - ldr_l x18, efi_rt_stack_top - ldr x18, [x18, #-16] -#endif - + mov x18, x2 b efi_handle_corrupted_x18 // tail call ENDPROC(__efi_rt_asm_wrapper) diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c index fb7f5e9e8114..4f9acb5fbe97 100644 --- a/arch/arm64/kernel/efi.c +++ b/arch/arm64/kernel/efi.c @@ -132,31 +132,3 @@ asmlinkage efi_status_t efi_handle_corrupted_x18(efi_status_t s, const char *f) pr_err_ratelimited(FW_BUG "register x18 corrupted by EFI %s\n", f); return s; } - -DEFINE_SPINLOCK(efi_rt_lock); - -asmlinkage u64 *efi_rt_stack_top __ro_after_init; - -/* EFI requires 8 KiB of stack space for runtime services */ -static_assert(THREAD_SIZE >= SZ_8K); - -static int __init arm64_efi_rt_init(void) -{ - void *p; - - if (!efi_enabled(EFI_RUNTIME_SERVICES)) - return 0; - - p = __vmalloc_node(THREAD_SIZE, THREAD_ALIGN, GFP_KERNEL, - PAGE_KERNEL, 0, - NUMA_NO_NODE, &&l); -l: if (!p) { - pr_warn("Failed to allocate EFI runtime stack\n"); - clear_bit(EFI_RUNTIME_SERVICES, &efi.flags); - return -ENOMEM; - } - - efi_rt_stack_top = p + THREAD_SIZE; - return 0; -} -core_initcall(arm64_efi_rt_init);