How early is this bug? Do you see "Welcome to GRUB"? Does recompiling with
fPIC help? Do you have memory map dump and paging table dump?

Regards
Vladimir 'phcoder' Serbinenko

Le ven. 11 avr. 2025, 13:39, Tobias Heider <tobias.hei...@canonical.com> a
écrit :

> On arm64 we can't restrict memory usage below 0xffffffff as we do
> on x86 because there is no guarantee memory in that range exists
> at all (an example is Apple Silicon).
> Instead, try to allocate in the lower 4GB range first and fall
> back to the entire available address space if that did not work.
>
> This fixes a bug on Snapdragon X Elite devices such as the Lenovo
> Thinkpad T14s which crashes when accessing memory above 0xffffffff.
>
> Signed-off-by: Tobias Heider <tobias.hei...@canonical.com>
> ---
>
>  For previous discussion see
>  https://lists.gnu.org/archive/html/grub-devel/2025-04/msg00072.html
>
>  In contrast to the previous patch this one affects all archs.
>  It seems generally safe not to limit it to arm64 with the fallback
>  to the old behaviour but I'd be interested to hear if there are any
>  concerns.
>  Tested on a Snapdragon X Elite and Macbook M2 Air.
>
>  grub-core/kern/efi/mm.c | 16 +++++++++++++---
>  1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c
> index df238b165..029d975dd 100644
> --- a/grub-core/kern/efi/mm.c
> +++ b/grub-core/kern/efi/mm.c
> @@ -168,9 +168,19 @@ grub_efi_allocate_pages_real
> (grub_efi_physical_address_t address,
>  void *
>  grub_efi_allocate_any_pages (grub_efi_uintn_t pages)
>  {
> -  return grub_efi_allocate_pages_real (GRUB_EFI_MAX_USABLE_ADDRESS,
> -                                      pages,
> GRUB_EFI_ALLOCATE_MAX_ADDRESS,
> -                                      GRUB_EFI_LOADER_DATA);
> +  void *ret;
> +
> +  ret = grub_efi_allocate_pages_real (0xffffffff,
> +                                     pages, GRUB_EFI_ALLOCATE_MAX_ADDRESS,
> +                                     GRUB_EFI_LOADER_DATA);
> +  if (ret == NULL)
> +    {
> +      grub_errno = GRUB_ERR_NONE;
> +      ret = grub_efi_allocate_pages_real (GRUB_EFI_MAX_USABLE_ADDRESS,
> +                                         pages,
> GRUB_EFI_ALLOCATE_MAX_ADDRESS,
> +                                         GRUB_EFI_LOADER_DATA);
> +    }
> +  return ret;
>  }
>
>  void *
> --
> 2.48.1
>
>
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to