efi/libstub: Avoid physical address 0x0 when doing random allocation
authorArd Biesheuvel <ardb@kernel.org>
Fri, 14 Mar 2025 11:03:33 +0000 (12:03 +0100)
committerArd Biesheuvel <ardb@kernel.org>
Fri, 14 Mar 2025 11:21:29 +0000 (12:21 +0100)
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.

Cc: <stable@vger.kernel.org>
Reported-by: Ben Schneider <ben@bens.haus>
Tested-by: Ben Schneider <ben@bens.haus>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
drivers/firmware/efi/libstub/randomalloc.c

index 5a732018be36dacbd61805acf49cfa37e7551764..fd80b2f3233aa43d4436414f66b7df282391c0d8 100644 (file)
@@ -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 */