From bddc87b68fa30659178e494d768a6fe0047649b6 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 5 Jan 2023 12:14:21 +0100 Subject: [PATCH] drop arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch from everywhere --- ...time-services-from-a-dedicated-stack.patch | 125 ------------------ queue-5.10/series | 1 - ...time-services-from-a-dedicated-stack.patch | 125 ------------------ queue-5.15/series | 1 - ...time-services-from-a-dedicated-stack.patch | 125 ------------------ queue-6.0/series | 1 - ...time-services-from-a-dedicated-stack.patch | 125 ------------------ queue-6.1/series | 1 - 8 files changed, 504 deletions(-) delete mode 100644 queue-5.10/arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch delete mode 100644 queue-5.15/arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch delete mode 100644 queue-6.0/arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch delete mode 100644 queue-6.1/arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch diff --git a/queue-5.10/arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch b/queue-5.10/arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch deleted file mode 100644 index b77a8c7b5eb..00000000000 --- a/queue-5.10/arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch +++ /dev/null @@ -1,125 +0,0 @@ -From ff7a167961d1b97e0e205f245f806e564d3505e7 Mon Sep 17 00:00:00 2001 -From: Ard Biesheuvel -Date: Mon, 5 Dec 2022 11:31:25 +0100 -Subject: arm64: efi: Execute runtime services from a dedicated stack - -From: Ard Biesheuvel - -commit ff7a167961d1b97e0e205f245f806e564d3505e7 upstream. - -With the introduction of PRMT in the ACPI subsystem, the EFI rts -workqueue is no longer the only caller of efi_call_virt_pointer() in the -kernel. This means the EFI runtime services lock is no longer sufficient -to manage concurrent calls into firmware, but also that firmware calls -may occur that are not marshalled via the workqueue mechanism, but -originate directly from the caller context. - -For added robustness, and to ensure that the runtime services have 8 KiB -of stack space available as per the EFI spec, introduce a spinlock -protected EFI runtime stack of 8 KiB, where the spinlock also ensures -serialization between the EFI rts workqueue (which itself serializes EFI -runtime calls) and other callers of efi_call_virt_pointer(). - -While at it, use the stack pivot to avoid reloading the shadow call -stack pointer from the ordinary stack, as doing so could produce a -gadget to defeat it. - -Signed-off-by: Ard Biesheuvel -Signed-off-by: Greg Kroah-Hartman ---- - arch/arm64/include/asm/efi.h | 3 +++ - arch/arm64/kernel/efi-rt-wrapper.S | 13 ++++++++++++- - arch/arm64/kernel/efi.c | 27 +++++++++++++++++++++++++++ - 3 files changed, 42 insertions(+), 1 deletion(-) - ---- a/arch/arm64/include/asm/efi.h -+++ b/arch/arm64/include/asm/efi.h -@@ -25,6 +25,7 @@ int efi_set_mapping_permissions(struct m - ({ \ - efi_virtmap_load(); \ - __efi_fpsimd_begin(); \ -+ spin_lock(&efi_rt_lock); \ - }) - - #define arch_efi_call_virt(p, f, args...) \ -@@ -36,10 +37,12 @@ int efi_set_mapping_permissions(struct m - - #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) ---- a/arch/arm64/kernel/efi-rt-wrapper.S -+++ b/arch/arm64/kernel/efi-rt-wrapper.S -@@ -16,6 +16,12 @@ SYM_FUNC_START(__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 -@@ -29,6 +35,7 @@ SYM_FUNC_START(__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 -@@ -42,6 +49,10 @@ SYM_FUNC_START(__efi_rt_asm_wrapper) - * called with preemption disabled and a separate shadow stack is used - * for interrupts. - */ -- mov x18, x2 -+#ifdef CONFIG_SHADOW_CALL_STACK -+ ldr_l x18, efi_rt_stack_top -+ ldr x18, [x18, #-16] -+#endif -+ - b efi_handle_corrupted_x18 // tail call - SYM_FUNC_END(__efi_rt_asm_wrapper) ---- a/arch/arm64/kernel/efi.c -+++ b/arch/arm64/kernel/efi.c -@@ -143,3 +143,30 @@ asmlinkage efi_status_t efi_handle_corru - 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, -+ 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); diff --git a/queue-5.10/series b/queue-5.10/series index 802b3f52509..d23da15fdc4 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -666,7 +666,6 @@ drm-connector-send-hotplug-uevent-on-connector-cleanup.patch drm-vmwgfx-validate-the-box-size-for-the-snooped-cursor.patch drm-i915-dsi-fix-vbt-send-packet-port-selection-for-dual-link-dsi.patch drm-ingenic-fix-missing-platform_driver_unregister-call-in-ingenic_drm_init.patch -arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch ext4-silence-the-warning-when-evicting-inode-with-dioread_nolock.patch ext4-add-inode-table-check-in-__ext4_get_inode_loc-to-aovid-possible-infinite-loop.patch ext4-fix-use-after-free-in-ext4_orphan_cleanup.patch diff --git a/queue-5.15/arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch b/queue-5.15/arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch deleted file mode 100644 index 821b67f2333..00000000000 --- a/queue-5.15/arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch +++ /dev/null @@ -1,125 +0,0 @@ -From ff7a167961d1b97e0e205f245f806e564d3505e7 Mon Sep 17 00:00:00 2001 -From: Ard Biesheuvel -Date: Mon, 5 Dec 2022 11:31:25 +0100 -Subject: arm64: efi: Execute runtime services from a dedicated stack - -From: Ard Biesheuvel - -commit ff7a167961d1b97e0e205f245f806e564d3505e7 upstream. - -With the introduction of PRMT in the ACPI subsystem, the EFI rts -workqueue is no longer the only caller of efi_call_virt_pointer() in the -kernel. This means the EFI runtime services lock is no longer sufficient -to manage concurrent calls into firmware, but also that firmware calls -may occur that are not marshalled via the workqueue mechanism, but -originate directly from the caller context. - -For added robustness, and to ensure that the runtime services have 8 KiB -of stack space available as per the EFI spec, introduce a spinlock -protected EFI runtime stack of 8 KiB, where the spinlock also ensures -serialization between the EFI rts workqueue (which itself serializes EFI -runtime calls) and other callers of efi_call_virt_pointer(). - -While at it, use the stack pivot to avoid reloading the shadow call -stack pointer from the ordinary stack, as doing so could produce a -gadget to defeat it. - -Signed-off-by: Ard Biesheuvel -Signed-off-by: Greg Kroah-Hartman ---- - arch/arm64/include/asm/efi.h | 3 +++ - arch/arm64/kernel/efi-rt-wrapper.S | 13 ++++++++++++- - arch/arm64/kernel/efi.c | 27 +++++++++++++++++++++++++++ - 3 files changed, 42 insertions(+), 1 deletion(-) - ---- a/arch/arm64/include/asm/efi.h -+++ b/arch/arm64/include/asm/efi.h -@@ -25,6 +25,7 @@ int efi_set_mapping_permissions(struct m - ({ \ - efi_virtmap_load(); \ - __efi_fpsimd_begin(); \ -+ spin_lock(&efi_rt_lock); \ - }) - - #define arch_efi_call_virt(p, f, args...) \ -@@ -36,10 +37,12 @@ int efi_set_mapping_permissions(struct m - - #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) ---- a/arch/arm64/kernel/efi-rt-wrapper.S -+++ b/arch/arm64/kernel/efi-rt-wrapper.S -@@ -16,6 +16,12 @@ SYM_FUNC_START(__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 -@@ -29,6 +35,7 @@ SYM_FUNC_START(__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 -@@ -42,6 +49,10 @@ SYM_FUNC_START(__efi_rt_asm_wrapper) - * called with preemption disabled and a separate shadow stack is used - * for interrupts. - */ -- mov x18, x2 -+#ifdef CONFIG_SHADOW_CALL_STACK -+ ldr_l x18, efi_rt_stack_top -+ ldr x18, [x18, #-16] -+#endif -+ - b efi_handle_corrupted_x18 // tail call - SYM_FUNC_END(__efi_rt_asm_wrapper) ---- a/arch/arm64/kernel/efi.c -+++ b/arch/arm64/kernel/efi.c -@@ -144,3 +144,30 @@ asmlinkage efi_status_t efi_handle_corru - 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, -+ 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); diff --git a/queue-5.15/series b/queue-5.15/series index 901c645ae98..6b0bd220654 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -137,7 +137,6 @@ drm-connector-send-hotplug-uevent-on-connector-cleanup.patch drm-vmwgfx-validate-the-box-size-for-the-snooped-cursor.patch drm-i915-dsi-fix-vbt-send-packet-port-selection-for-dual-link-dsi.patch drm-ingenic-fix-missing-platform_driver_unregister-call-in-ingenic_drm_init.patch -arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch ext4-silence-the-warning-when-evicting-inode-with-dioread_nolock.patch ext4-add-inode-table-check-in-__ext4_get_inode_loc-to-aovid-possible-infinite-loop.patch ext4-remove-trailing-newline-from-ext4_msg-message.patch diff --git a/queue-6.0/arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch b/queue-6.0/arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch deleted file mode 100644 index f301eb69039..00000000000 --- a/queue-6.0/arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch +++ /dev/null @@ -1,125 +0,0 @@ -From ff7a167961d1b97e0e205f245f806e564d3505e7 Mon Sep 17 00:00:00 2001 -From: Ard Biesheuvel -Date: Mon, 5 Dec 2022 11:31:25 +0100 -Subject: arm64: efi: Execute runtime services from a dedicated stack - -From: Ard Biesheuvel - -commit ff7a167961d1b97e0e205f245f806e564d3505e7 upstream. - -With the introduction of PRMT in the ACPI subsystem, the EFI rts -workqueue is no longer the only caller of efi_call_virt_pointer() in the -kernel. This means the EFI runtime services lock is no longer sufficient -to manage concurrent calls into firmware, but also that firmware calls -may occur that are not marshalled via the workqueue mechanism, but -originate directly from the caller context. - -For added robustness, and to ensure that the runtime services have 8 KiB -of stack space available as per the EFI spec, introduce a spinlock -protected EFI runtime stack of 8 KiB, where the spinlock also ensures -serialization between the EFI rts workqueue (which itself serializes EFI -runtime calls) and other callers of efi_call_virt_pointer(). - -While at it, use the stack pivot to avoid reloading the shadow call -stack pointer from the ordinary stack, as doing so could produce a -gadget to defeat it. - -Signed-off-by: Ard Biesheuvel -Signed-off-by: Greg Kroah-Hartman ---- - arch/arm64/include/asm/efi.h | 3 +++ - arch/arm64/kernel/efi-rt-wrapper.S | 13 ++++++++++++- - arch/arm64/kernel/efi.c | 27 +++++++++++++++++++++++++++ - 3 files changed, 42 insertions(+), 1 deletion(-) - ---- a/arch/arm64/include/asm/efi.h -+++ b/arch/arm64/include/asm/efi.h -@@ -25,6 +25,7 @@ int efi_set_mapping_permissions(struct m - ({ \ - efi_virtmap_load(); \ - __efi_fpsimd_begin(); \ -+ spin_lock(&efi_rt_lock); \ - }) - - #undef arch_efi_call_virt -@@ -33,10 +34,12 @@ int efi_set_mapping_permissions(struct m - - #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) ---- a/arch/arm64/kernel/efi-rt-wrapper.S -+++ b/arch/arm64/kernel/efi-rt-wrapper.S -@@ -16,6 +16,12 @@ SYM_FUNC_START(__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 -@@ -29,6 +35,7 @@ SYM_FUNC_START(__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 -@@ -42,6 +49,10 @@ SYM_FUNC_START(__efi_rt_asm_wrapper) - * called with preemption disabled and a separate shadow stack is used - * for interrupts. - */ -- mov x18, x2 -+#ifdef CONFIG_SHADOW_CALL_STACK -+ ldr_l x18, efi_rt_stack_top -+ ldr x18, [x18, #-16] -+#endif -+ - b efi_handle_corrupted_x18 // tail call - SYM_FUNC_END(__efi_rt_asm_wrapper) ---- a/arch/arm64/kernel/efi.c -+++ b/arch/arm64/kernel/efi.c -@@ -144,3 +144,30 @@ asmlinkage efi_status_t efi_handle_corru - 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, -+ 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); diff --git a/queue-6.0/series b/queue-6.0/series index 424a857b332..917bfb9a79a 100644 --- a/queue-6.0/series +++ b/queue-6.0/series @@ -128,7 +128,6 @@ drm-etnaviv-move-idle-mapping-reaping-into-separate-function.patch drm-i915-dsi-fix-vbt-send-packet-port-selection-for-dual-link-dsi.patch drm-ingenic-fix-missing-platform_driver_unregister-call-in-ingenic_drm_init.patch drm-etnaviv-reap-idle-mapping-if-it-doesn-t-match-the-softpin-address.patch -arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch ext4-silence-the-warning-when-evicting-inode-with-dioread_nolock.patch ext4-add-inode-table-check-in-__ext4_get_inode_loc-to-aovid-possible-infinite-loop.patch ext4-remove-trailing-newline-from-ext4_msg-message.patch diff --git a/queue-6.1/arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch b/queue-6.1/arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch deleted file mode 100644 index f301eb69039..00000000000 --- a/queue-6.1/arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch +++ /dev/null @@ -1,125 +0,0 @@ -From ff7a167961d1b97e0e205f245f806e564d3505e7 Mon Sep 17 00:00:00 2001 -From: Ard Biesheuvel -Date: Mon, 5 Dec 2022 11:31:25 +0100 -Subject: arm64: efi: Execute runtime services from a dedicated stack - -From: Ard Biesheuvel - -commit ff7a167961d1b97e0e205f245f806e564d3505e7 upstream. - -With the introduction of PRMT in the ACPI subsystem, the EFI rts -workqueue is no longer the only caller of efi_call_virt_pointer() in the -kernel. This means the EFI runtime services lock is no longer sufficient -to manage concurrent calls into firmware, but also that firmware calls -may occur that are not marshalled via the workqueue mechanism, but -originate directly from the caller context. - -For added robustness, and to ensure that the runtime services have 8 KiB -of stack space available as per the EFI spec, introduce a spinlock -protected EFI runtime stack of 8 KiB, where the spinlock also ensures -serialization between the EFI rts workqueue (which itself serializes EFI -runtime calls) and other callers of efi_call_virt_pointer(). - -While at it, use the stack pivot to avoid reloading the shadow call -stack pointer from the ordinary stack, as doing so could produce a -gadget to defeat it. - -Signed-off-by: Ard Biesheuvel -Signed-off-by: Greg Kroah-Hartman ---- - arch/arm64/include/asm/efi.h | 3 +++ - arch/arm64/kernel/efi-rt-wrapper.S | 13 ++++++++++++- - arch/arm64/kernel/efi.c | 27 +++++++++++++++++++++++++++ - 3 files changed, 42 insertions(+), 1 deletion(-) - ---- a/arch/arm64/include/asm/efi.h -+++ b/arch/arm64/include/asm/efi.h -@@ -25,6 +25,7 @@ int efi_set_mapping_permissions(struct m - ({ \ - efi_virtmap_load(); \ - __efi_fpsimd_begin(); \ -+ spin_lock(&efi_rt_lock); \ - }) - - #undef arch_efi_call_virt -@@ -33,10 +34,12 @@ int efi_set_mapping_permissions(struct m - - #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) ---- a/arch/arm64/kernel/efi-rt-wrapper.S -+++ b/arch/arm64/kernel/efi-rt-wrapper.S -@@ -16,6 +16,12 @@ SYM_FUNC_START(__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 -@@ -29,6 +35,7 @@ SYM_FUNC_START(__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 -@@ -42,6 +49,10 @@ SYM_FUNC_START(__efi_rt_asm_wrapper) - * called with preemption disabled and a separate shadow stack is used - * for interrupts. - */ -- mov x18, x2 -+#ifdef CONFIG_SHADOW_CALL_STACK -+ ldr_l x18, efi_rt_stack_top -+ ldr x18, [x18, #-16] -+#endif -+ - b efi_handle_corrupted_x18 // tail call - SYM_FUNC_END(__efi_rt_asm_wrapper) ---- a/arch/arm64/kernel/efi.c -+++ b/arch/arm64/kernel/efi.c -@@ -144,3 +144,30 @@ asmlinkage efi_status_t efi_handle_corru - 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, -+ 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); diff --git a/queue-6.1/series b/queue-6.1/series index 54dbba1f8af..ce23f73bfec 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -157,7 +157,6 @@ drm-etnaviv-move-idle-mapping-reaping-into-separate-function.patch drm-i915-dsi-fix-vbt-send-packet-port-selection-for-dual-link-dsi.patch drm-ingenic-fix-missing-platform_driver_unregister-call-in-ingenic_drm_init.patch drm-etnaviv-reap-idle-mapping-if-it-doesn-t-match-the-softpin-address.patch -arm64-efi-execute-runtime-services-from-a-dedicated-stack.patch ext4-silence-the-warning-when-evicting-inode-with-dioread_nolock.patch ext4-add-inode-table-check-in-__ext4_get_inode_loc-to-aovid-possible-infinite-loop.patch ext4-remove-trailing-newline-from-ext4_msg-message.patch -- 2.47.3