[prev in list] [next in list] [prev in thread] [next in thread] 

List:       grub-devel
Subject:    Re: [PATCH] Fix fwpath in efi netboot
From:       Andrei Borzenkov <arvidjaar () gmail ! com>
Date:       2016-12-22 19:47:08
Message-ID: 2103c1ea-92e9-9061-38f5-48f04e71a77a () gmail ! com
[Download RAW message or body]

19.12.2016 12:09, Michael Chang пишет:
> The path returned by grub_efi_net_config has already been stripped for the
> directory part extracted from cached bootp packet. We should just return the
> result to avoild it be stripped again.
> 
> It fixed the problem that grub.efi as NBP image always looking for grub.cfg and
> platform directory in upper folder rather than current one it gets loaded while
> $prefix is empty. The behavior is inconsistent with other architecture and how
> we would expect empty $prefix going to be in general.
> 
> The only exception to the general rule of empty $prefix is that when loaded
> from platform directory itself, the platform part is stripped thus upper folder
> is used for looking up files. It meets the case for how grub-mknetdir lay out
> the files under tftp root directory, but also hide away this issue to be
> identified as it appears to be just works.

Thanks! Committed with additional fix - move *path assignment after
grub_efi_net_config. We may receive file_path from firmware (e.g. iPXE
ROM does set it) and we leaked it this way.

Actually, iPXE ROMs, at least those shipped with Ubuntu 16.04, break
grub2 netboot in interesting way, by passing "wrong" handle to image -
the one for base interface instead of the child that has PXE protocol.
It took me quite some time to understand why I cannot netboot anymore ...

> ---
>  grub-core/kern/efi/init.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/grub-core/kern/efi/init.c b/grub-core/kern/efi/init.c
> index e9c85de..dfa35a2 100644
> --- a/grub-core/kern/efi/init.c
> +++ b/grub-core/kern/efi/init.c
> @@ -61,7 +61,10 @@ grub_machine_get_bootlocation (char **device, char **path)
>    *device = grub_efidisk_get_device_name (image->device_handle);
>    *path = grub_efi_get_filename (image->file_path);
>    if (!*device && grub_efi_net_config)
> -    grub_efi_net_config (image->device_handle, device, path);
> +    {
> +      grub_efi_net_config (image->device_handle, device, path);
> +      return;
> +    }
>  
>    if (*path)
>      {
> 


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

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic