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

Reply via email to