]> git.ipfire.org Git - thirdparty/qemu.git/commit - linux-user/syscall.c
linux-user: fix mmap/munmap/mprotect/mremap/shmat
authorMax Filippov <jcmvbkbc@gmail.com>
Wed, 7 Mar 2018 21:50:10 +0000 (13:50 -0800)
committerLaurent Vivier <laurent@vivier.eu>
Fri, 9 Mar 2018 18:21:34 +0000 (19:21 +0100)
commitebf9a3630c911d0cfc9c20f7cafe9ba4f88cf583
tree7ab5dec45952e20b3eca851c56504bbbcc3df102
parentd4247ec2d79ef2477cb886fa688706b068119736
linux-user: fix mmap/munmap/mprotect/mremap/shmat

In linux-user QEMU that runs for a target with TARGET_ABI_BITS bigger
than L1_MAP_ADDR_SPACE_BITS an assertion in page_set_flags fires when
mmap, munmap, mprotect, mremap or shmat is called for an address outside
the guest address space. mmap and mprotect should return ENOMEM in such
case.

Change definition of GUEST_ADDR_MAX to always be the last valid guest
address. Account for this change in open_self_maps.
Add macro guest_addr_valid that verifies if the guest address is valid.
Add function guest_range_valid that verifies if address range is within
guest address space and does not wrap around. Use that macro in
mmap/munmap/mprotect/mremap/shmat for error checking.

Cc: qemu-stable@nongnu.org
Cc: Riku Voipio <riku.voipio@iki.fi>
Cc: Laurent Vivier <laurent@vivier.eu>
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Message-Id: <20180307215010.30706-1-jcmvbkbc@gmail.com>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
include/exec/cpu-all.h
include/exec/cpu_ldst.h
linux-user/mmap.c
linux-user/syscall.c