623d5ad
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
623d5ad
From: Javier Martinez Canillas <javierm@redhat.com>
623d5ad
Date: Tue, 6 Jul 2021 00:38:40 +0200
623d5ad
Subject: [PATCH] templates: Check for EFI at runtime instead of config
623d5ad
 generation time
623d5ad
623d5ad
The 30_uefi-firmware template checks if an OsIndicationsSupported UEFI var
623d5ad
exists and EFI_OS_INDICATIONS_BOOT_TO_FW_UI bit is set, to decide whether
623d5ad
a "fwsetup" menu entry would be added or not to the GRUB menu.
623d5ad
623d5ad
But this has the problem that it will only work if the configuration file
623d5ad
was created on an UEFI machine that supports booting to a firmware UI.
623d5ad
623d5ad
This for example doesn't support creating GRUB config files when executing
623d5ad
on systems that support both UEFI and legacy BIOS booting. Since creating
623d5ad
the config file from legacy BIOS wouldn't allow to access the firmware UI.
623d5ad
623d5ad
To prevent this, make the template to unconditionally create the grub.cfg
623d5ad
snippet but check at runtime if was booted through UEFI to decide if this
623d5ad
entry should be added. That way it won't be added when booting with BIOS.
623d5ad
623d5ad
There's no need to check if EFI_OS_INDICATIONS_BOOT_TO_FW_UI bit is set,
623d5ad
since that's already done by the "fwsetup" command when is executed.
623d5ad
623d5ad
Resolves: rhbz#1823864
623d5ad
623d5ad
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
623d5ad
---
623d5ad
 util/grub.d/30_uefi-firmware.in | 21 ++++++++-------------
623d5ad
 1 file changed, 8 insertions(+), 13 deletions(-)
623d5ad
623d5ad
diff --git a/util/grub.d/30_uefi-firmware.in b/util/grub.d/30_uefi-firmware.in
623d5ad
index d344d3883d7..b6041b55e2a 100644
623d5ad
--- a/util/grub.d/30_uefi-firmware.in
623d5ad
+++ b/util/grub.d/30_uefi-firmware.in
623d5ad
@@ -26,19 +26,14 @@ export TEXTDOMAINDIR="@localedir@"
623d5ad
 
623d5ad
 . "$pkgdatadir/grub-mkconfig_lib"
623d5ad
 
623d5ad
-EFI_VARS_DIR=/sys/firmware/efi/efivars
623d5ad
-EFI_GLOBAL_VARIABLE=8be4df61-93ca-11d2-aa0d-00e098032b8c
623d5ad
-OS_INDICATIONS="$EFI_VARS_DIR/OsIndicationsSupported-$EFI_GLOBAL_VARIABLE"
623d5ad
+LABEL="UEFI Firmware Settings"
623d5ad
 
623d5ad
-if [ -e "$OS_INDICATIONS" ] && \
623d5ad
-   [ "$(( $(printf 0x%x \'"$(cat $OS_INDICATIONS | cut -b5)"\') & 1 ))" = 1 ]; then
623d5ad
-  LABEL="UEFI Firmware Settings"
623d5ad
+gettext_printf "Adding boot menu entry for UEFI Firmware Settings ...\n" >&2
623d5ad
 
623d5ad
-  gettext_printf "Adding boot menu entry for UEFI Firmware Settings ...\n" >&2
623d5ad
-
623d5ad
-  cat << EOF
623d5ad
-menuentry '$LABEL' \$menuentry_id_option 'uefi-firmware' {
623d5ad
-	fwsetup
623d5ad
-}
623d5ad
-EOF
623d5ad
+cat << EOF
623d5ad
+if [ "\$grub_platform" = "efi" ]; then
623d5ad
+	menuentry '$LABEL' \$menuentry_id_option 'uefi-firmware' {
623d5ad
+		fwsetup
623d5ad
+	}
623d5ad
 fi
623d5ad
+EOF