Hello GRUB Developers,
I hope this message finds you well. During my work with the GRUB
chainloader command in conjunction with grub-to-bootmgr, I encountered
the error message: "failed to load image." This message lacked
sufficient detail to diagnose the underlying issue.
Upon investigation, I discovered that the UEFI Boot Services function
`LoadImage()` was returning various error statuses. However, GRUB's
current implementation handles only a generic error code, omitting
more specific and informative statuses defined in the UEFI
specification.
According to the UEFI Specification (version 2.11), `LoadImage()` can
return multiple error status codes that offer precise information
about the nature of the failure.
Patch:
* loader/efi/chainloader.c (grub_cmd_chainloader): Enhance error
handling by adding specific messages for invalid parameters, image not
found, and unsupported image types based on UEFI LoadImage() error
codes.
```diff
diff --git a/grub-core/loader/efi/chainloader.c
b/grub-core/loader/efi/chainloader.c
index 869307bf3..4fd46dfda 100644
--- a/grub-core/loader/efi/chainloader.c
+++ b/grub-core/loader/efi/chainloader.c
@@ -346,6 +346,12 @@ grub_cmd_chainloader (grub_command_t cmd
__attribute__ ((unused)),
{
if (status == GRUB_EFI_OUT_OF_RESOURCES)
grub_error (GRUB_ERR_OUT_OF_MEMORY, "Out of resources");
+ else if (status == GRUB_EFI_INVALID_PARAMETER)
+ grub_error (GRUB_ERR_BAD_ARGUMENT, "Invalid image parameters");
+ else if (status == GRUB_EFI_NOT_FOUND)
+ grub_error (GRUB_ERR_FILE_NOT_FOUND, "Image not found");
+ else if (status == GRUB_EFI_UNSUPPORTED)
+ grub_error (GRUB_ERR_BAD_OS, "Unsupported image type");
else
grub_error (GRUB_ERR_BAD_OS, "Cannot load image");
}
```diff
While this patch addresses some of the most common error statuses, the
UEFI `LoadImage()` function defines 11 return status codes (excluding
EFI_SUCCESS). Future enhancements could aim to cover additional
statuses for more informative messages.
Best regards,
Khaalid
_______________________________________________
Grub-devel mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/grub-devel