|
|
5593c8 |
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
5593c8 |
From: Javier Martinez Canillas <javierm@redhat.com>
|
|
|
5593c8 |
Date: Tue, 6 Jul 2021 01:10:18 +0200
|
|
|
5593c8 |
Subject: [PATCH] efi: Print an error if boot to firmware setup is not
|
|
|
5593c8 |
supported
|
|
|
5593c8 |
|
|
|
5593c8 |
The "fwsetup" command is only registered if the firmware supports booting
|
|
|
5593c8 |
to the firmware setup UI. But it could be possible that the GRUB config
|
|
|
5593c8 |
already contains a "fwsetup" entry, because it was generated in a machine
|
|
|
5593c8 |
that has support for this feature.
|
|
|
5593c8 |
|
|
|
5593c8 |
To prevent users getting a "can't find command `fwsetup`" error if it is
|
|
|
5593c8 |
not supported by the firmware, let's just always register the command but
|
|
|
5593c8 |
print a more accurate message if the firmware doesn't support this option.
|
|
|
5593c8 |
|
|
|
5593c8 |
Resolves: rhbz#1823864
|
|
|
5593c8 |
|
|
|
5593c8 |
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
|
|
5593c8 |
---
|
|
|
5593c8 |
grub-core/commands/efi/efifwsetup.c | 43 ++++++++++++++++++++-----------------
|
|
|
5593c8 |
1 file changed, 23 insertions(+), 20 deletions(-)
|
|
|
5593c8 |
|
|
|
5593c8 |
diff --git a/grub-core/commands/efi/efifwsetup.c b/grub-core/commands/efi/efifwsetup.c
|
|
|
1c6ba0 |
index eaca032838..328c45e82e 100644
|
|
|
5593c8 |
--- a/grub-core/commands/efi/efifwsetup.c
|
|
|
5593c8 |
+++ b/grub-core/commands/efi/efifwsetup.c
|
|
|
5593c8 |
@@ -27,6 +27,25 @@
|
|
|
5593c8 |
|
|
|
5593c8 |
GRUB_MOD_LICENSE ("GPLv3+");
|
|
|
5593c8 |
|
|
|
5593c8 |
+static grub_efi_boolean_t
|
|
|
5593c8 |
+efifwsetup_is_supported (void)
|
|
|
5593c8 |
+{
|
|
|
5593c8 |
+ grub_efi_uint64_t *os_indications_supported = NULL;
|
|
|
5593c8 |
+ grub_size_t oi_size = 0;
|
|
|
5593c8 |
+ grub_efi_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID;
|
|
|
5593c8 |
+
|
|
|
5593c8 |
+ grub_efi_get_variable ("OsIndicationsSupported", &global, &oi_size,
|
|
|
5593c8 |
+ (void **) &os_indications_supported);
|
|
|
5593c8 |
+
|
|
|
5593c8 |
+ if (!os_indications_supported)
|
|
|
5593c8 |
+ return 0;
|
|
|
5593c8 |
+
|
|
|
5593c8 |
+ if (*os_indications_supported & GRUB_EFI_OS_INDICATIONS_BOOT_TO_FW_UI)
|
|
|
5593c8 |
+ return 1;
|
|
|
5593c8 |
+
|
|
|
5593c8 |
+ return 0;
|
|
|
5593c8 |
+}
|
|
|
5593c8 |
+
|
|
|
5593c8 |
static grub_err_t
|
|
|
5593c8 |
grub_cmd_fwsetup (grub_command_t cmd __attribute__ ((unused)),
|
|
|
5593c8 |
int argc __attribute__ ((unused)),
|
|
|
5593c8 |
@@ -38,6 +57,10 @@ grub_cmd_fwsetup (grub_command_t cmd __attribute__ ((unused)),
|
|
|
5593c8 |
grub_size_t oi_size;
|
|
|
5593c8 |
grub_efi_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID;
|
|
|
5593c8 |
|
|
|
5593c8 |
+ if (!efifwsetup_is_supported ())
|
|
|
5593c8 |
+ return grub_error (GRUB_ERR_INVALID_COMMAND,
|
|
|
5593c8 |
+ N_("Reboot to firmware setup is not supported"));
|
|
|
5593c8 |
+
|
|
|
5593c8 |
grub_efi_get_variable ("OsIndications", &global, &oi_size,
|
|
|
5593c8 |
(void **) &old_os_indications);
|
|
|
5593c8 |
|
|
|
5593c8 |
@@ -56,28 +79,8 @@ grub_cmd_fwsetup (grub_command_t cmd __attribute__ ((unused)),
|
|
|
5593c8 |
|
|
|
5593c8 |
static grub_command_t cmd = NULL;
|
|
|
5593c8 |
|
|
|
5593c8 |
-static grub_efi_boolean_t
|
|
|
5593c8 |
-efifwsetup_is_supported (void)
|
|
|
5593c8 |
-{
|
|
|
5593c8 |
- grub_efi_uint64_t *os_indications_supported = NULL;
|
|
|
5593c8 |
- grub_size_t oi_size = 0;
|
|
|
5593c8 |
- grub_efi_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID;
|
|
|
5593c8 |
-
|
|
|
5593c8 |
- grub_efi_get_variable ("OsIndicationsSupported", &global, &oi_size,
|
|
|
5593c8 |
- (void **) &os_indications_supported);
|
|
|
5593c8 |
-
|
|
|
5593c8 |
- if (!os_indications_supported)
|
|
|
5593c8 |
- return 0;
|
|
|
5593c8 |
-
|
|
|
5593c8 |
- if (*os_indications_supported & GRUB_EFI_OS_INDICATIONS_BOOT_TO_FW_UI)
|
|
|
5593c8 |
- return 1;
|
|
|
5593c8 |
-
|
|
|
5593c8 |
- return 0;
|
|
|
5593c8 |
-}
|
|
|
5593c8 |
-
|
|
|
5593c8 |
GRUB_MOD_INIT (efifwsetup)
|
|
|
5593c8 |
{
|
|
|
5593c8 |
- if (efifwsetup_is_supported ())
|
|
|
5593c8 |
cmd = grub_register_command ("fwsetup", grub_cmd_fwsetup, NULL,
|
|
|
5593c8 |
N_("Reboot into firmware setup menu."));
|
|
|
5593c8 |
|