]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 6.7
authorSasha Levin <sashal@kernel.org>
Sun, 24 Mar 2024 21:25:29 +0000 (17:25 -0400)
committerSasha Levin <sashal@kernel.org>
Sun, 24 Mar 2024 21:25:29 +0000 (17:25 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-6.7/series
queue-6.7/x86-efistub-don-t-clear-bss-twice-in-mixed-mode.patch [new file with mode: 0644]

index 9f6c95c11bba43e65c5595c7719b1536bc80ec91..6edae9f80628fee212ebec4844c81ce4184066c7 100644 (file)
@@ -709,3 +709,4 @@ selftests-forwarding-fix-ping-failure-due-to-short-t.patch
 dm-io-support-io-priority.patch
 dm-integrity-align-the-outgoing-bio-in-integrity_rec.patch
 x86-efistub-clear-decompressor-bss-in-native-efi-ent.patch
+x86-efistub-don-t-clear-bss-twice-in-mixed-mode.patch
diff --git a/queue-6.7/x86-efistub-don-t-clear-bss-twice-in-mixed-mode.patch b/queue-6.7/x86-efistub-don-t-clear-bss-twice-in-mixed-mode.patch
new file mode 100644 (file)
index 0000000..e8fc467
--- /dev/null
@@ -0,0 +1,43 @@
+From 5a064d87924c5f6fc88618e831f0e518e83da2f5 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Fri, 22 Mar 2024 17:01:45 +0100
+Subject: x86/efistub: Don't clear BSS twice in mixed mode
+
+From: Ard Biesheuvel <ardb@kernel.org>
+
+[ Upstream commit df7ecce842b846a04d087ba85fdb79a90e26a1b0 ]
+
+Clearing BSS should only be done once, at the very beginning.
+efi_pe_entry() is the entrypoint from the firmware, which may not clear
+BSS and so it is done explicitly. However, efi_pe_entry() is also used
+as an entrypoint by the mixed mode startup code, in which case BSS will
+already have been cleared, and doing it again at this point will corrupt
+global variables holding the firmware's GDT/IDT and segment selectors.
+
+So make the memset() conditional on whether the EFI stub is running in
+native mode.
+
+Fixes: b3810c5a2cc4a666 ("x86/efistub: Clear decompressor BSS in native EFI entrypoint")
+Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/firmware/efi/libstub/x86-stub.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/firmware/efi/libstub/x86-stub.c b/drivers/firmware/efi/libstub/x86-stub.c
+index 681f576ec02a0..c9857ee3880c2 100644
+--- a/drivers/firmware/efi/libstub/x86-stub.c
++++ b/drivers/firmware/efi/libstub/x86-stub.c
+@@ -467,7 +467,8 @@ efi_status_t __efiapi efi_pe_entry(efi_handle_t handle,
+       efi_status_t status;
+       char *cmdline_ptr;
+-      memset(_bss, 0, _ebss - _bss);
++      if (efi_is_native())
++              memset(_bss, 0, _ebss - _bss);
+       efi_system_table = sys_table_arg;
+-- 
+2.43.0
+