]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
loader/efi/chainloader: Use shim loader image handle where available
authorMate Kukri <mate.kukri@canonical.com>
Tue, 8 Jul 2025 20:21:16 +0000 (21:21 +0100)
committerDaniel Kiper <daniel.kiper@oracle.com>
Fri, 11 Jul 2025 15:46:19 +0000 (17:46 +0200)
Not reusing these handles will result in image measurements showing up
twice in the event log.

Signed-off-by: Mate Kukri <mate.kukri@canonical.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/loader/efi/chainloader.c

index 11b64ac1b688fc3d61701045e31ff6a8fc07b63e..e77bd863c4e582b894e24cc6ad2a8857f22143e0 100644 (file)
@@ -33,6 +33,7 @@
 #include <grub/efi/efi.h>
 #include <grub/efi/disk.h>
 #include <grub/efi/memory.h>
+#include <grub/efi/sb.h>
 #include <grub/command.h>
 #include <grub/i18n.h>
 #include <grub/net.h>
@@ -337,16 +338,20 @@ grub_cmd_chainloader (grub_command_t cmd __attribute__ ((unused)),
     }
 #endif
 
-  status = grub_efi_load_image (0, grub_efi_image_handle, file_path,
-                               boot_image, size, &image_handle);
-  if (status != GRUB_EFI_SUCCESS)
+  image_handle = grub_efi_get_last_verified_image_handle ();
+  if (image_handle == NULL)
     {
-      if (status == GRUB_EFI_OUT_OF_RESOURCES)
-       grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of resources");
-      else
-       grub_error (GRUB_ERR_BAD_OS, "cannot load image");
+      status = grub_efi_load_image (0, grub_efi_image_handle, file_path,
+                               boot_image, size, &image_handle);
+      if (status != GRUB_EFI_SUCCESS)
+       {
+         if (status == GRUB_EFI_OUT_OF_RESOURCES)
+           grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of resources");
+         else
+           grub_error (GRUB_ERR_BAD_OS, "cannot load image");
 
-      goto fail;
+         goto fail;
+       }
     }
 
   /* LoadImage does not set a device handler when the image is