nalika / rpms / grub2

Forked from rpms/grub2 2 years ago
Clone

Blame SOURCES/0215-efi-Print-an-error-if-boot-to-firmware-setup-is-not-.patch

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