linux-user: Reserve space for brk
commit6fd5944980f4ccee728ce34bdaffc117db50b34d
authorRichard Henderson <richard.henderson@linaro.org>
Fri, 17 Jan 2020 23:02:45 +0000 (17 13:02 -1000)
committerLaurent Vivier <laurent@vivier.eu>
Wed, 22 Jan 2020 14:00:03 +0000 (22 15:00 +0100)
tree58cd4936f7f97c6808dbf2376c84864775634957
parent91c8bdb1e6690fa2b6f107613271ae923126f098
linux-user: Reserve space for brk

With bad luck, we can wind up with no space at all for brk,
which will generally cause the guest malloc to fail.

This bad luck is easier to come by with ET_DYN (PIE) binaries,
where either the stack or the interpreter (ld.so) gets placed
immediately after the main executable.

But there's nothing preventing this same thing from happening
with ET_EXEC (normal) binaries, during probe_guest_base().

In both cases, reserve some extra space via mmap and release
it back to the system after loading the interpreter and
allocating the stack.

The choice of 16MB is somewhat arbitrary.  It's enough for libc
to get going, but without being so large that 32-bit guests or
32-bit hosts are in danger of running out of virtual address space.
It is expected that libc will be able to fall back to mmap arenas
after the limited brk space is exhausted.

Launchpad: https://bugs.launchpad.net/qemu/+bug/1749393
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Tested-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20200117230245.5040-1-richard.henderson@linaro.org>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
linux-user/elfload.c
linux-user/qemu.h