From 0c9ac06a2894ea08488b5f8f5d1e5cbd57808900 Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Sun, 18 Nov 2018 17:58:53 +0100 Subject: [PATCH] efi_loader: create fdt reservation before copy When copying the device we must ensure that the copy does not fall into a memory area reserved by the same. So let's change the sequence: first create memory reservations and then copy the device tree. Signed-off-by: Heinrich Schuchardt Signed-off-by: Alexander Graf --- cmd/bootefi.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/cmd/bootefi.c b/cmd/bootefi.c index ad97a9c019..38679ffc56 100644 --- a/cmd/bootefi.c +++ b/cmd/bootefi.c @@ -280,13 +280,6 @@ static void efi_carve_out_dt_rsv(void *fdt) /* Convert from sandbox address space. */ addr = (uintptr_t)map_sysmem(addr, 0); - /* - * Do not carve out the device tree. It is already marked as - * EFI_RUNTIME_SERVICES_DATA - */ - if (addr == (uintptr_t)fdt) - continue; - pages = efi_size_in_pages(size + (addr & EFI_PAGE_MASK)); addr &= ~EFI_PAGE_MASK; if (!efi_add_memory_map(addr, pages, EFI_RESERVED_MEMORY_TYPE, @@ -307,6 +300,9 @@ static efi_status_t efi_install_fdt(ulong fdt_addr) return EFI_INVALID_PARAMETER; } + /* Create memory reservation as indicated by the device tree */ + efi_carve_out_dt_rsv(fdt); + /* Prepare fdt for payload */ ret = copy_fdt(&fdt); if (ret) @@ -317,8 +313,6 @@ static efi_status_t efi_install_fdt(ulong fdt_addr) return EFI_LOAD_ERROR; } - efi_carve_out_dt_rsv(fdt); - /* Link to it in the efi tables */ ret = efi_install_configuration_table(&efi_guid_fdt, fdt); if (ret != EFI_SUCCESS) -- 2.25.1