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 ca448bc11a0..55b8f401624 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)
|
||
{
|