diff --git a/backport-shim-don-t-set-second_stage-to-the-empty-string.patch b/backport-shim-don-t-set-second_stage-to-the-empty-string.patch new file mode 100644 index 0000000000000000000000000000000000000000..4bc6805c1f139903172e86949df76a5be9127ca9 --- /dev/null +++ b/backport-shim-don-t-set-second_stage-to-the-empty-string.patch @@ -0,0 +1,54 @@ +From 0287c6b14c77eeb3e3c61996330850d43d937a2b Mon Sep 17 00:00:00 2001 +From: Jonathan Davies +Date: Thu, 22 Feb 2024 16:24:01 +0000 +Subject: [PATCH] shim: don't set second_stage to the empty string + +When LoadOptions is either L" " or L"shim.efi ", parse_load_options sets +second_stage to the empty string. This is unlikely to be what is intended, and +typically leads to a non-obvious failure mode. + +The failure happens because parse_load_options's call to split_load_options +(after eating shim's own filename, if present) returns the empty string. Since +init_grub typically passes second_stage to start_image, this causes read_image +to concatenate the empty string onto the directory name. This means PathName +refers to the directory, not the path to a pe image. Then load_image +successfully opens a handle on the directory and reads "data" from it. It only +eventually fails when handle_image calls read_header which finds that this data +isn't in fact a pe header, reporting "Invalid image". + +This scenario has been seen when shim is loaded via rEFInd 0.11.5, which sets +LoadOptions to the name of the shim program followed by a space character. + +Instead, modify parse_load_options to leave second_stage set to its default +value rather than the empty string. + +Reference:https://github.com/rhboot/shim/commit/0287c6b14c77eeb3e3c61996330850d43d937a2b +Conflict:NA + +Signed-off-by: Jonathan Davies +--- + load-options.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/load-options.c b/load-options.c +index a8c6e1a..8b92e37 100644 +--- a/load-options.c ++++ b/load-options.c +@@ -447,10 +447,12 @@ parse_load_options(EFI_LOADED_IMAGE *li) + + /* + * Set up the name of the alternative loader and the LoadOptions for +- * the loader ++ * the loader if it's not the empty string. + */ + if (loader_str) { +- second_stage = loader_str; ++ if (*loader_str) { ++ second_stage = loader_str; ++ } + load_options = remaining; + load_options_size = remaining_size; + } +-- +2.33.0 + diff --git a/shim.spec b/shim.spec index eabc3ce21046d2404b287cbfb1985a8697b027f3..6d0cd366f6ec1360e670be9c0d9494db79d8cfcb 100644 --- a/shim.spec +++ b/shim.spec @@ -25,7 +25,7 @@ Name: shim Version: 15.6 -Release: 23 +Release: 24 Summary: First-stage UEFI bootloader ExclusiveArch: x86_64 aarch64 License: BSD @@ -87,6 +87,7 @@ Patch49: backport-CVE-2023-2650.patch Patch50: backport-CVE-2023-0465.patch Patch51: backport-CVE-2024-0727.patch Patch52: backport-Always-clear-SbatLevel-when-Secure-Boot-is-disabled.patch +Patch53: backport-shim-don-t-set-second_stage-to-the-empty-string.patch # Feature for shim SMx support Patch9000:Feature-shim-openssl-add-ec-support.patch @@ -230,6 +231,9 @@ make test /usr/src/debug/%{name}-%{version}-%{release}/* %changelog +* Tue Oct 22 2024 fuanan -15.6-24 +- backport patch from upstream + * Tue May 7 2024 jinlun - 15.6-23 - Fix the TPCM feature issue