On Fri, Feb 24, 2017, 09:47 Andrei Borzenkov <arvidj...@gmail.com> 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 > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel >
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel