[U-Boot] [PATCH 2/4] efi_loader: correctly set ImageBase for loaded image
Heinrich Schuchardt
xypron.glpk at gmx.de
Thu Mar 29 22:37:51 UTC 2018
In the EFI_LOADED_IMAGE_PROTOCOL ImageBase and ImageSize should reflect
where the loaded image can be found in memory. If we do a relocation
this is the relocated location and size.
Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
---
lib/efi_loader/efi_image_loader.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/lib/efi_loader/efi_image_loader.c b/lib/efi_loader/efi_image_loader.c
index cac64ba9fe..5125340fc0 100644
--- a/lib/efi_loader/efi_image_loader.c
+++ b/lib/efi_loader/efi_image_loader.c
@@ -124,7 +124,6 @@ void *efi_load_pe(void *efi, struct efi_loaded_image *loaded_image_info)
unsigned long rel_size;
int rel_idx = IMAGE_DIRECTORY_ENTRY_BASERELOC;
void *entry;
- uint64_t image_size;
unsigned long virt_size = 0;
bool can_run_nt64 = true;
bool can_run_nt32 = true;
@@ -163,7 +162,6 @@ void *efi_load_pe(void *efi, struct efi_loaded_image *loaded_image_info)
(nt->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)) {
IMAGE_NT_HEADERS64 *nt64 = (void *)nt;
IMAGE_OPTIONAL_HEADER64 *opt = &nt64->OptionalHeader;
- image_size = opt->SizeOfImage;
efi_set_code_and_data_type(loaded_image_info, opt->Subsystem);
efi_reloc = efi_alloc(virt_size,
loaded_image_info->image_code_type);
@@ -178,7 +176,6 @@ void *efi_load_pe(void *efi, struct efi_loaded_image *loaded_image_info)
} else if (can_run_nt32 &&
(nt->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC)) {
IMAGE_OPTIONAL_HEADER32 *opt = &nt->OptionalHeader;
- image_size = opt->SizeOfImage;
efi_set_code_and_data_type(loaded_image_info, opt->Subsystem);
efi_reloc = efi_alloc(virt_size,
loaded_image_info->image_code_type);
@@ -219,8 +216,8 @@ void *efi_load_pe(void *efi, struct efi_loaded_image *loaded_image_info)
invalidate_icache_all();
/* Populate the loaded image interface bits */
- loaded_image_info->image_base = efi;
- loaded_image_info->image_size = image_size;
+ loaded_image_info->image_base = efi_reloc;
+ loaded_image_info->image_size = virt_size;
return entry;
}
--
2.11.0
More information about the U-Boot
mailing list