67 lines
2.2 KiB
Diff
67 lines
2.2 KiB
Diff
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|||
|
From: Paul Menzel <pmenzel@molgen.mpg.de>
|
|||
|
Date: Tue, 23 Oct 2018 15:00:13 +0200
|
|||
|
Subject: [PATCH] unix/platform: Initialize variable to fix grub-install on
|
|||
|
UEFI system
|
|||
|
MIME-Version: 1.0
|
|||
|
Content-Type: text/plain; charset=UTF-8
|
|||
|
Content-Transfer-Encoding: 8bit
|
|||
|
|
|||
|
On a UEFI system, were no boot entry *grub* is present, currently,
|
|||
|
`grub-install` fails with an error.
|
|||
|
|
|||
|
$ efibootmgr
|
|||
|
BootCurrent: 0000
|
|||
|
Timeout: 0 seconds
|
|||
|
BootOrder: 0001,0006,0003,0004,0005
|
|||
|
Boot0001 Diskette Drive
|
|||
|
Boot0003* USB Storage Device
|
|||
|
Boot0004* CD/DVD/CD-RW Drive
|
|||
|
Boot0005 Onboard NIC
|
|||
|
Boot0006* WDC WD2500AAKX-75U6AA0
|
|||
|
$ sudo grub-install /dev/sda
|
|||
|
Installing for x86_64-efi platform.
|
|||
|
grub-install: error: efibootmgr failed to register the boot entry: Unknown error 22020.
|
|||
|
|
|||
|
The error code is always different, and the error message (incorrectly)
|
|||
|
points to efibootmgr.
|
|||
|
|
|||
|
But, the error is in GRUB’s function
|
|||
|
`grub_install_remove_efi_entries_by_distributor()`, where the variable
|
|||
|
`rc` for the return value, is uninitialized and never set, when no boot
|
|||
|
entry for the distributor is found.
|
|||
|
|
|||
|
The content of that uninitialized variable is then returned as the error
|
|||
|
code of efibootmgr.
|
|||
|
|
|||
|
Set the variable to 0, so that success is returned, when no entry needs
|
|||
|
to be deleted.
|
|||
|
|
|||
|
Tested on Dell OptiPlex 7010 with firmware A28.
|
|||
|
|
|||
|
$ sudo ./grub-install /dev/sda
|
|||
|
Installing for x86_64-efi platform.
|
|||
|
Installation finished. No error reported.
|
|||
|
|
|||
|
[1]: https://github.com/rhboot/efibootmgr/issues/100
|
|||
|
|
|||
|
Signed-off-by: Paul Menzel <pmenzel@molgen.mpg.de>
|
|||
|
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
|
|||
|
---
|
|||
|
grub-core/osdep/unix/platform.c | 2 +-
|
|||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|||
|
|
|||
|
diff --git a/grub-core/osdep/unix/platform.c b/grub-core/osdep/unix/platform.c
|
|||
|
index ca448bc11..55b8f4016 100644
|
|||
|
--- a/grub-core/osdep/unix/platform.c
|
|||
|
+++ b/grub-core/osdep/unix/platform.c
|
|||
|
@@ -85,7 +85,7 @@ grub_install_remove_efi_entries_by_distributor (const char *efi_distributor)
|
|||
|
pid_t pid = grub_util_exec_pipe ((const char * []){ "efibootmgr", NULL }, &fd);
|
|||
|
char *line = NULL;
|
|||
|
size_t len = 0;
|
|||
|
- int rc;
|
|||
|
+ int rc = 0;
|
|||
|
|
|||
|
if (!pid)
|
|||
|
{
|