Since dropping 32-bit host support, a guest address cannot overflow a host pointer. This means guest_hiaddr is unused for relocatable images, so don't pass guest_hiaddr as size.
Signed-off-by: Richard Henderson <[email protected]> --- linux-user/elfload.c | 26 +++++++------------------- linux-user/flatload.c | 3 +-- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/linux-user/elfload.c b/linux-user/elfload.c index fb774adf25..33565ad7be 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -1092,20 +1092,11 @@ void probe_guest_base(const char *image_name, abi_ulong guest_loaddr, uintptr_t align = MAX(SHMLBA, TARGET_PAGE_SIZE); /* Sanity check the guest binary. */ - if (reserved_va) { - if (guest_hiaddr > reserved_va) { - error_report("%s: requires more than reserved virtual " - "address space (0x%" PRIx64 " > 0x%lx)", - image_name, (uint64_t)guest_hiaddr, reserved_va); - exit(EXIT_FAILURE); - } - } else { - if (guest_hiaddr != (uintptr_t)guest_hiaddr) { - error_report("%s: requires more virtual address space " - "than the host can provide (0x%" PRIx64 ")", - image_name, (uint64_t)guest_hiaddr + 1); - exit(EXIT_FAILURE); - } + if (reserved_va && guest_hiaddr > reserved_va) { + error_report("%s: requires more than reserved virtual " + "address space (0x%" PRIx64 " > 0x%lx)", + image_name, (uint64_t)guest_hiaddr, reserved_va); + exit(EXIT_FAILURE); } if (have_guest_base) { @@ -1373,11 +1364,8 @@ static void load_elf_image(const char *image_name, const ImageSource *src, */ probe_guest_base(image_name, range.lo, range.hi); } else { - /* - * The binary is dynamic, but we still need to - * select guest_base. In this case we pass a size. - */ - probe_guest_base(image_name, 0, range.hi - range.lo); + /* The binary is dynamic; we still need to select guest_base. */ + probe_guest_base(image_name, 0, 0); /* * Avoid collision with the loader by providing a different diff --git a/linux-user/flatload.c b/linux-user/flatload.c index 4beb3ed1b9..8abdd2aef2 100644 --- a/linux-user/flatload.c +++ b/linux-user/flatload.c @@ -261,8 +261,7 @@ static int load_flat_file(struct linux_binprm * bprm, /* * Allocate the address space. */ - probe_guest_base(bprm->filename, 0, - text_len + data_len + extra + indx_len - 1); + probe_guest_base(bprm->filename, 0, 0); /* * there are a couple of cases here, the separate code/data -- 2.43.0
