On Thu, Oct 10, 2024 at 03:43:26PM GMT, Leo Sandoval wrote:
> From: Paulo Flabiano Smorigo <pfsmor...@br.ibm.com>
> 
> This patch makes grub look for its config file on efi where the app was
> found. It was originally written by Matthew Garrett, and adapted to fix the
> "No modules are loaded on grub2 network boot" issue:
> 
> https://bugzilla.redhat.com/show_bug.cgi?id=857936
> 
> Signed-off-by: Paulo Flabiano Smorigo <pfsmor...@br.ibm.com>
> Signed-off-by: Robbie Harwood <rharw...@redhat.com>
> ---
>  grub-core/kern/main.c   | 13 ++++++-------
>  grub-core/normal/main.c | 25 ++++++++++++++++++++++++-
>  2 files changed, 30 insertions(+), 8 deletions(-)
> 
> diff --git a/grub-core/kern/main.c b/grub-core/kern/main.c
> index 731c07c29..463dafdba 100644
> --- a/grub-core/kern/main.c
> +++ b/grub-core/kern/main.c
> @@ -128,16 +128,15 @@ grub_set_prefix_and_root (void)
>  
>    grub_machine_get_bootlocation (&fwdevice, &fwpath);
>  
> -  if (fwdevice)
> +  if (fwdevice && fwpath)
>      {
> -      char *cmdpath;
> +      char *fw_path;
>  
> -      cmdpath = grub_xasprintf ("(%s)%s", fwdevice, fwpath ? : "");
> -      if (cmdpath)
> +      fw_path = grub_xasprintf ("(%s)/%s", fwdevice, fwpath);
> +      if (fw_path)
>       {
> -       grub_env_set ("cmdpath", cmdpath);
> -       grub_env_export ("cmdpath");
> -       grub_free (cmdpath);
> +       grub_env_set ("fw_path", fw_path);
> +       grub_free (fw_path);


I believe $cmdpath is an important and well-known public variable. It is
officially documented [1], and therefore, it shouldn't be removed or
renamed without formal notice.

A quick google search [2] shows many references to $cmdpath, and many
custom grub scripts would rely on it to function properly.

IMHO removing or renaming it would introduce a breaking change. Adding
$fw_path would be fine, but it's unclear to me why that would be
necessary either.

[1]
https://www.gnu.org/software/grub/manual/grub/html_node/cmdpath.html

[2]
https://wiki.archlinux.org/title/GRUB/Tips_and_tricks
https://superuser.com/questions/1757526/get-device-part-of-a-file-path-within-grub-cfg
https://github.com/opencomputeproject/onie/blob/master/build-config/scripts/mk-grub-efi-image
https://stackoverflow.com/questions/35269943/how-does-the-grub-2-uefi-loader-know-where-to-look-for-the-configuration-file-o

Thanks,
Michael

>       }
>      }
>  
> diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c
> index d3f53d93d..08f48c71d 100644
> --- a/grub-core/normal/main.c
> +++ b/grub-core/normal/main.c
> @@ -339,7 +339,30 @@ grub_cmd_normal (struct grub_command *cmd __attribute__ 
> ((unused)),
>        /* Guess the config filename. It is necessary to make CONFIG static,
>        so that it won't get broken by longjmp.  */
>        char *config;
> -      const char *prefix;
> +      const char *prefix, *fw_path;
> +
> +      fw_path = grub_env_get ("fw_path");
> +      if (fw_path)
> +     {
> +       config = grub_xasprintf ("%s/grub.cfg", fw_path);
> +       if (config)
> +         {
> +           grub_file_t file;
> +
> +           file = grub_file_open (config, GRUB_FILE_TYPE_CONFIG);
> +           if (file)
> +             {
> +               grub_file_close (file);
> +               grub_enter_normal_mode (config);
> +             }
> +              else
> +                {
> +                  /*  Ignore all errors.  */
> +                  grub_errno = 0;
> +                }
> +           grub_free (config);
> +         }
> +     }
>  
>        prefix = grub_env_get ("prefix");
>        if (prefix)
> -- 
> 2.46.2
> 
> 
> _______________________________________________
> 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