From: Kyle Evans <kev...@freebsd.org> jemalloc requires a working MAP_EXCL. Ensure that no page is double mapped when specified.
Signed-off-by: Kyle Evans <kev...@freebsd.org> Signed-off-by: Warner Losh <i...@bsdimp.com> --- bsd-user/mmap.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/bsd-user/mmap.c b/bsd-user/mmap.c index 347d314aa9..792ff00548 100644 --- a/bsd-user/mmap.c +++ b/bsd-user/mmap.c @@ -387,7 +387,7 @@ abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size) abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, int flags, int fd, off_t offset) { - abi_ulong ret, end, real_start, real_end, retaddr, host_offset, host_len; + abi_ulong addr, ret, end, real_start, real_end, retaddr, host_offset, host_len; mmap_lock(); #ifdef DEBUG_MMAP @@ -599,6 +599,14 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, goto the_end; } + /* Reject the mapping if any page within the range is mapped */ + if (flags & MAP_EXCL) { + for (addr = start; addr < end; addr++) { + if (page_get_flags(addr) != 0) + goto fail; + } + } + /* handle the start of the mapping */ if (start > real_start) { if (real_end == real_start + qemu_host_page_size) { -- 2.32.0