Skip to content

Commit

Permalink
linux-user/elfload: use MAP_FIXED_NOREPLACE in pgb_reserved_va
Browse files Browse the repository at this point in the history
Given we assert the requested address matches what we asked we should
also make that clear in the mmap flags. Otherwise we see failures in
the GitLab environment for some currently unknown but allowable
reason. We use MAP_FIXED_NOREPLACE if we can so we don't just clobber
an existing mapping. Also include the strerror string for a bit more
info on failure.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

Message-Id: <20200701135652.1366-34-alex.bennee@linaro.org>
  • Loading branch information
stsquad committed Jul 11, 2020
1 parent 27ebeda commit c1f6ad7
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions linux-user/elfload.c
Original file line number Diff line number Diff line change
Expand Up @@ -2294,7 +2294,7 @@ static void pgb_dynamic(const char *image_name, long align)
static void pgb_reserved_va(const char *image_name, abi_ulong guest_loaddr,
abi_ulong guest_hiaddr, long align)
{
const int flags = MAP_ANONYMOUS | MAP_PRIVATE | MAP_NORESERVE;
int flags = MAP_ANONYMOUS | MAP_PRIVATE | MAP_NORESERVE;
void *addr, *test;

if (guest_hiaddr > reserved_va) {
Expand All @@ -2307,15 +2307,19 @@ static void pgb_reserved_va(const char *image_name, abi_ulong guest_loaddr,
/* Widen the "image" to the entire reserved address space. */
pgb_static(image_name, 0, reserved_va, align);

#ifdef MAP_FIXED_NOREPLACE
flags |= MAP_FIXED_NOREPLACE;
#endif

/* Reserve the memory on the host. */
assert(guest_base != 0);
test = g2h(0);
addr = mmap(test, reserved_va, PROT_NONE, flags, -1, 0);
if (addr == MAP_FAILED) {
error_report("Unable to reserve 0x%lx bytes of virtual address "
"space for use as guest address space (check your "
"space (%s) for use as guest address space (check your "
"virtual memory ulimit setting or reserve less "
"using -R option)", reserved_va);
"using -R option)", reserved_va, strerror(errno));
exit(EXIT_FAILURE);
}
assert(addr == test);
Expand Down

0 comments on commit c1f6ad7

Please sign in to comment.