]> glassweightruler.freedombox.rocks Git - Ventoy.git/commitdiff
Correct EFI chainloader image device path (#2397)
authorA1ive <10670106+a1ive@users.noreply.github.com>
Fri, 19 May 2023 15:23:14 +0000 (23:23 +0800)
committerGitHub <noreply@github.com>
Fri, 19 May 2023 15:23:14 +0000 (23:23 +0800)
GRUB2/MOD_SRC/grub-2.04/grub-core/loader/efi/chainloader.c

index fa8a4b997c8250c1b37aa94c9e1000779045aecc..4e8209228bc83c06a9cb70974b7760d3b94a3b1e 100644 (file)
@@ -229,10 +229,7 @@ grub_cmd_chainloader (grub_command_t cmd __attribute__ ((unused)),
   if (! file)
     goto fail;
 
   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);
 
   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 (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);
 
   //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_file_close (file);
-  grub_device_close (dev);
 
   grub_loader_set (grub_chainloader_boot, grub_chainloader_unload, 0);
   return 0;
 
  fail:
 
 
   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);
 
   if (file)
     grub_file_close (file);