grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] efi: strip off final NULL from File Path in grub_efi_get_fil


From: Vladimir 'phcoder' Serbinenko
Subject: Re: [PATCH] efi: strip off final NULL from File Path in grub_efi_get_filename
Date: Fri, 24 Feb 2017 23:21:43 +0000



On Fri, Feb 24, 2017, 09:47 Andrei Borzenkov <address@hidden> wrote:
UEFI 2.6 9.3.6.4 File Path Media Device Path says that Path Name is
"A NULL-terminated Path string including directory and file names".

Strip final NULL from Path Name in each File Path node when constructing
full path. To be on safe side, strip all of them.

Fixes failure chainloading grub from grub, when loaded grub truncates
image path and does not find its grub.cfg.

https://bugzilla.opensuse.org/show_bug.cgi?id=1026344

This was triggered by commit ce95549cc54b5d6f494608a7c390dba3aab4fba7;
before it we built Path Name without trailing NULL, and apparently all
other bootloaders use single File Path node, thus not exposing this bug.

---
@Vladimir, @Daniel - this fixes regression in rc1 and is real fix for
the mentioned problem (previous patch only fixed the case of grub - grub
chainloading, this patch should properly parse image path also when called
from other EFI application).
I'm OK with this patch. Especially that it's unlikely to break anything. Is the other patch still needed? If other loaders do it with a single path element we should probably too, to avoid this kind of bugs. Question is mostly whether it's rc1 material.

 grub-core/kern/efi/efi.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c
index caf9bcc..d467785 100644
--- a/grub-core/kern/efi/efi.c
+++ b/grub-core/kern/efi/efi.c
@@ -366,6 +366,9 @@ grub_efi_get_filename (grub_efi_device_path_t *dp0)
          len = ((GRUB_EFI_DEVICE_PATH_LENGTH (dp) - 4)
                 / sizeof (grub_efi_char16_t));
          fp = (grub_efi_file_path_device_path_t *) dp;
+         /* According to EFI spec Path Name is NULL terminated */
+         while (len > 0 && fp->path_name[len - 1] == 0)
+           len--;

          p = (char *) grub_utf16_to_utf8 ((unsigned char *) p, fp->path_name, len);
        }
--
tg: (2fb8cd2..) u/efi-strip-final-NULL-from-file-path (depends on: master)

_______________________________________________
Grub-devel mailing list
address@hidden
https://lists.gnu.org/mailman/listinfo/grub-devel

reply via email to

[Prev in Thread] Current Thread [Next in Thread]