summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBingwu Zhang <xtex@astrafall.org>2026-02-28 00:46:30 +0800
committerMichael Tokarev <mjt@tls.msk.ru>2026-03-11 16:41:49 +0300
commit58c5c5ea2b93f7b284f412547450eecb6155b6ec (patch)
treebedbecf972ec5b73c343a11bc0fedf98a2921382
parent42215ee6244cc378ce56a9c1ee7d0889075cc1b2 (diff)
downloadqemu-58c5c5ea2b93f7b284f412547450eecb6155b6ec.tar.gz
qemu-58c5c5ea2b93f7b284f412547450eecb6155b6ec.zip
linux-user: Deal with mmap where start > reserved_va
Fixes: 4c13048e02d9 ("linux-user: Use page_find_range_empty for mmap_find_vma_reserved") Resolves: https://gitlab.com/qemu-project/qemu/-/issues/3310 Signed-off-by: Bingwu Zhang <xtex@astrafall.org> Reviewed-by: Helge Deller <deller@gmx.de> Signed-off-by: Helge Deller <deller@gmx.de> (cherry picked from commit f2813e13fe910e01127271a87177a477b9438bc6) Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
-rw-r--r--linux-user/mmap.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/linux-user/mmap.c b/linux-user/mmap.c
index da5ff46a0f..e49dbaaa20 100644
--- a/linux-user/mmap.c
+++ b/linux-user/mmap.c
@@ -418,12 +418,15 @@ abi_ulong mmap_next_start;
static abi_ulong mmap_find_vma_reserved(abi_ulong start, abi_ulong size,
abi_ulong align)
{
- target_ulong ret;
+ target_ulong ret = -1;
- ret = page_find_range_empty(start, reserved_va, size, align);
+ if (start <= reserved_va) {
+ ret = page_find_range_empty(start, reserved_va, size, align);
+ }
if (ret == -1 && start > mmap_min_addr) {
/* Restart at the beginning of the address space. */
- ret = page_find_range_empty(mmap_min_addr, start - 1, size, align);
+ ret = page_find_range_empty(mmap_min_addr, MIN(start - 1, reserved_va),
+ size, align);
}
return ret;