linux-user: Unset MAP_FIXED_NOREPLACE for host
Passing MAP_FIXED_NOREPLACE to host will fail for reserved_va because the address space is reserved with mmap. Replace it with MAP_FIXED in that case. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Message-Id: <20230802071754.14876-2-akihiko.odaki@daynix.com> [rth: Expand inline commentary.] Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
4333f0924c
commit
c3dd50da0f
@ -603,11 +603,26 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int target_prot,
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Validate that the chosen range is empty. */
|
if (flags & MAP_FIXED_NOREPLACE) {
|
||||||
if ((flags & MAP_FIXED_NOREPLACE)
|
/* Validate that the chosen range is empty. */
|
||||||
&& !page_check_range_empty(start, last)) {
|
if (!page_check_range_empty(start, last)) {
|
||||||
errno = EEXIST;
|
errno = EEXIST;
|
||||||
goto fail;
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* With reserved_va, the entire address space is mmaped in the
|
||||||
|
* host to ensure it isn't accidentally used for something else.
|
||||||
|
* We have just checked that the guest address is not mapped
|
||||||
|
* within the guest, but need to replace the host reservation.
|
||||||
|
*
|
||||||
|
* Without reserved_va, despite the guest address check above,
|
||||||
|
* keep MAP_FIXED_NOREPLACE so that the guest does not overwrite
|
||||||
|
* any host address mappings.
|
||||||
|
*/
|
||||||
|
if (reserved_va) {
|
||||||
|
flags = (flags & ~MAP_FIXED_NOREPLACE) | MAP_FIXED;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user