[U-Boot] [PATCH 1/1] efi_loader: fix memory allocation on sandbox

Heinrich Schuchardt xypron.glpk at gmx.de
Sat Jan 5 22:41:36 UTC 2019


Commit 7b78d6438a2b ("efi_loader: Reserve unaccessible memory") introduced
a comparison between RAM top and RAM start that was not known at the time
when the patch of commit 49759743bf09 ("efi_loader: eliminate sandbox
addresses") was written.

The sandbox uses an address space that is only relevant in the sandbox
context. We have to map ram_top from the sandbox address space to the
physical address space before using it in the EFI subsystem.

Fixes: 49759743bf09 ("efi_loader: eliminate sandbox addresses")
Fixes: 7b78d6438a2b ("efi_loader: Reserve unaccessible memory")
Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
---
Travis CI showed no error:
https://travis-ci.org/xypron2/u-boot/builds/475766261
---
 lib/efi_loader/efi_memory.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c
index 4bb517473e..0ae49f5d5f 100644
--- a/lib/efi_loader/efi_memory.c
+++ b/lib/efi_loader/efi_memory.c
@@ -554,6 +554,12 @@ __weak void efi_add_known_memory(void)
 	u64 ram_top = board_get_usable_ram_top(0) & ~EFI_PAGE_MASK;
 	int i;
 
+	/*
+	 * ram_top is just outside mapped memory. So use an offset of one for
+	 * mapping the sandbox address.
+	 */
+	ram_top = (uintptr_t)map_sysmem(ram_top - 1, 0) + 1;
+
 	/* Fix for 32bit targets with ram_top at 4G */
 	if (!ram_top)
 		ram_top = 0x100000000ULL;
-- 
2.20.1



More information about the U-Boot mailing list