From: Mate Kukri Date: Tue, 8 Jul 2025 20:21:17 +0000 (+0100) Subject: loader/efi/linux: Use shim loader image handle where available X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=a0d4c94ef667cbd95f72826a3e099e903c9f0df8;p=thirdparty%2Fgrub.git loader/efi/linux: Use shim loader image handle where available Not reusing these handles will result in image measurements showing up twice in the event log. On the occasion add missing grub_free() call. Signed-off-by: Mate Kukri Reviewed-by: Daniel Kiper --- diff --git a/grub-core/loader/efi/linux.c b/grub-core/loader/efi/linux.c index 0ef4559aa..2c7c874f2 100644 --- a/grub-core/loader/efi/linux.c +++ b/grub-core/loader/efi/linux.c @@ -207,11 +207,20 @@ grub_arch_efi_linux_boot_image (grub_addr_t addr, grub_size_t size, char *args) mempath[1].header.subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; mempath[1].header.length = sizeof (grub_efi_device_path_t); - status = grub_efi_load_image (0, grub_efi_image_handle, - (grub_efi_device_path_t *)mempath, - (void *)addr, size, &image_handle); - if (status != GRUB_EFI_SUCCESS) - return grub_error (GRUB_ERR_BAD_OS, "cannot load image"); + image_handle = grub_efi_get_last_verified_image_handle (); + if (image_handle == NULL) + { + status = grub_efi_load_image (0, grub_efi_image_handle, + (grub_efi_device_path_t *) mempath, + (void *) addr, size, &image_handle); + if (status != GRUB_EFI_SUCCESS) + { + grub_free (mempath); + return grub_error (GRUB_ERR_BAD_OS, "cannot load image"); + } + } + + grub_free (mempath); grub_dprintf ("linux", "linux command line: '%s'\n", args);