When we allocate space a buffer with some extra space for the FDT, adjust
authorkettenis <kettenis@openbsd.org>
Wed, 16 Mar 2022 22:32:50 +0000 (22:32 +0000)
committerkettenis <kettenis@openbsd.org>
Wed, 16 Mar 2022 22:32:50 +0000 (22:32 +0000)
the size of the FDT to reflect the size of that buffer.  This prevents
an FDT overflow if the original FDT doesn't have enough space for the
additional properties that we add to it in our bootloader.

Fixes boot on the mcbin.
tested by bluhm@, ok patrick@

sys/arch/arm64/stand/efiboot/efiboot.c

index f21b69d..a38021f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: efiboot.c,v 1.38 2021/12/15 00:37:21 deraadt Exp $    */
+/*     $OpenBSD: efiboot.c,v 1.39 2022/03/16 22:32:50 kettenis Exp $   */
 
 /*
  * Copyright (c) 2015 YASUOKA Masahiko <yasuoka@yasuoka.net>
@@ -554,6 +554,7 @@ efi_makebootargs(char *bootargs, int howto)
        if (BS->AllocatePages(AllocateAnyPages, EfiLoaderData,
            EFI_SIZE_TO_PAGES(len), &addr) == EFI_SUCCESS) {
                memcpy((void *)addr, fdt, fdt_get_size(fdt));
+               ((struct fdt_head *)addr)->fh_size = len;
                fdt = (void *)addr;
        }