From 35c952d891c5804d065145fbf731f602a0a4100d Mon Sep 17 00:00:00 2001 From: A1ive <10670106+a1ive@users.noreply.github.com> Date: Fri, 19 May 2023 23:23:14 +0800 Subject: [PATCH] Correct EFI chainloader image device path (#2397) --- .../grub-core/loader/efi/chainloader.c | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/loader/efi/chainloader.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/loader/efi/chainloader.c index fa8a4b99..4e820922 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/loader/efi/chainloader.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/loader/efi/chainloader.c @@ -229,10 +229,7 @@ grub_cmd_chainloader (grub_command_t cmd __attribute__ ((unused)), if (! file) goto fail; - /* Get the root device's device path. */ - dev = grub_device_open (0); - if (! dev) - goto fail; + dev = file->device; if (dev->disk) dev_handle = grub_efidisk_get_device_handle (dev->disk); @@ -257,16 +254,13 @@ grub_cmd_chainloader (grub_command_t cmd __attribute__ ((unused)), if (dev_handle) dp = grub_efi_get_device_path (dev_handle); - if (! dp) + if (dp != NULL) { - grub_error (GRUB_ERR_BAD_DEVICE, "not a valid root device"); - goto fail; + file_path = make_file_path (dp, filename); + if (! file_path) + goto fail; } - file_path = make_file_path (dp, filename); - if (! file_path) - goto fail; - //grub_printf ("file path: "); //grub_efi_print_device_path (file_path); @@ -390,16 +384,12 @@ grub_cmd_chainloader (grub_command_t cmd __attribute__ ((unused)), } grub_file_close (file); - grub_device_close (dev); grub_loader_set (grub_chainloader_boot, grub_chainloader_unload, 0); return 0; fail: - if (dev) - grub_device_close (dev); - if (file) grub_file_close (file);