Re: [PATCH] efi/libstub: Avoid physical address 0x0 when doing random allocation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 14 Mar 2025 at 13:08, Ard Biesheuvel <ardb+git@xxxxxxxxxx> wrote:
>
> From: Ard Biesheuvel <ardb@xxxxxxxxxx>
>
> Ben reports spurious EFI zboot failures on a system where physical RAM
> starts at 0x0. When doing random memory allocation from the EFI stub on
> such a platform, a random seed of 0x0 (which means no entropy source is
> available) will result in the allocation to be placed at address 0x0 if
> sufficient space is available.
>
> When this allocation is subsequently passed on to the decompression
> code, the 0x0 address is mistaken for NULL and the code complains and
> gives up.
>
> So avoid address 0x0 when doing random allocation, and set the minimum
> address to the minimum alignment.
>
> Reported-by: Ben Schneider <ben@xxxxxxxxx>
> Tested-by: Ben Schneider <ben@xxxxxxxxx>
> Cc: Ilias Apalodimas <ilias.apalodimas@xxxxxxxxxx>
> Signed-off-by: Ard Biesheuvel <ardb@xxxxxxxxxx>
> ---
>  drivers/firmware/efi/libstub/randomalloc.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/drivers/firmware/efi/libstub/randomalloc.c b/drivers/firmware/efi/libstub/randomalloc.c
> index 5a732018be36..fd80b2f3233a 100644
> --- a/drivers/firmware/efi/libstub/randomalloc.c
> +++ b/drivers/firmware/efi/libstub/randomalloc.c
> @@ -75,6 +75,10 @@ efi_status_t efi_random_alloc(unsigned long size,
>         if (align < EFI_ALLOC_ALIGN)
>                 align = EFI_ALLOC_ALIGN;
>
> +       /* Avoid address 0x0, as it can be mistaken for NULL */
> +       if (alloc_min == 0)
> +               alloc_min = align;
> +
>         size = round_up(size, EFI_ALLOC_ALIGN);
>
>         /* count the suitable slots in each memory map entry */
> --
> 2.49.0.rc1.451.g8f38331e32-goog
>

Reviewed-by: Ilias Apalodimas <ilias.apalodimas@xxxxxxxxxx>




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux