On Thu, Sep 19, 2024 at 5:33 PM Mate Kukri <mate.ku...@canonical.com> wrote:
>
> Signed-off-by: Mate Kukri <mate.ku...@canonical.com>
> ---
>  grub-core/kern/efi/sb.c      | 28 ++++++++++++++++++++++++++++
>  grub-core/loader/efi/linux.c | 12 +++++++-----
>  include/grub/efi/api.h       |  2 ++
>  include/grub/efi/sb.h        |  2 ++
>  4 files changed, 39 insertions(+), 5 deletions(-)
>
> diff --git a/grub-core/kern/efi/sb.c b/grub-core/kern/efi/sb.c
> index d3de39599..abe08db6f 100644
> --- a/grub-core/kern/efi/sb.c
> +++ b/grub-core/kern/efi/sb.c
> @@ -225,3 +225,31 @@ grub_shim_lock_verifier_setup (void)
>    grub_env_set ("shim_lock", "y");
>    grub_env_export ("shim_lock");
>  }
> +
> +int

Minor: why not using a boolean?

> +grub_efi_check_nx_required (void)
> +{
> +  int nx_required = 1; /* assume required, unless we can prove otherwise */
> +  grub_efi_status_t status;
> +  grub_size_t mok_policy_sz = 0;
> +  char *mok_policy = NULL;
> +  grub_uint32_t mok_policy_attrs = 0;
> +
> +  status = grub_efi_get_variable_with_attributes ("MokPolicy",
> +                                                 &(grub_guid_t) 
> GRUB_EFI_SHIM_LOCK_GUID,
> +                                                 &mok_policy_sz,
> +                                                 (void **)&mok_policy,
> +                                                 &mok_policy_attrs);
> +  if (status != GRUB_EFI_SUCCESS ||
> +      mok_policy_sz != 1 ||
> +      mok_policy == NULL ||
> +      mok_policy_attrs != GRUB_EFI_VARIABLE_BOOTSERVICE_ACCESS)
> +    goto out;
> +
> +  nx_required = !!(mok_policy[0] & GRUB_MOK_POLICY_NX_REQUIRED);
> +
> + out:
> +  grub_free (mok_policy);
> +
> +  return nx_required;
> +}
> diff --git a/grub-core/loader/efi/linux.c b/grub-core/loader/efi/linux.c
> index d6860fdba..18a03d0c6 100644
> --- a/grub-core/loader/efi/linux.c
> +++ b/grub-core/loader/efi/linux.c
> @@ -473,21 +473,23 @@ grub_cmd_linux (grub_command_t cmd __attribute__ 
> ((unused)),
>
>    kernel_size = grub_file_size (file);
>
> -  if (grub_arch_efi_linux_load_image_header (file, &lh) != GRUB_ERR_NONE)
>  #if !defined(__i386__) && !defined(__x86_64__)
> +  if (grub_arch_efi_linux_load_image_header (file, &lh) != GRUB_ERR_NONE)
>      goto fail;
>  #else
> -    goto fallback;
> -
> -  if (!initrd_use_loadfile2)
> +  if (grub_arch_efi_linux_load_image_header (file, &lh) != GRUB_ERR_NONE ||
> +      !initrd_use_loadfile2)
>      {
> +      /* We cannot use the legacy loader when NX is required */
> +      if (grub_efi_check_nx_required())

Minor, style: space after function name.

> +        goto fail;
> +
>        /*
>         * This is a EFI stub image but it is too old to implement the 
> LoadFile2
>         * based initrd loading scheme, and Linux/x86 does not support the DT
>         * based method either. So fall back to the x86-specific loader that
>         * enters Linux in EFI mode but without going through its EFI stub.
>         */
> -fallback:
>        grub_file_close (file);
>        return grub_cmd_linux_x86_legacy (cmd, argc, argv);
>      }
...

Frediano

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

Reply via email to