aboutsummaryrefslogtreecommitdiff
path: root/linux-user
diff options
context:
space:
mode:
authorFabiano Rosas <farosas@suse.de>2025-02-13 11:35:58 -0300
committerRichard Henderson <richard.henderson@linaro.org>2025-02-18 08:29:03 -0800
commit4b7b20a3b72c5000ea71bef505c16e6e628268b6 (patch)
tree01134adbde36739121af623db7c79271bf949039 /linux-user
parent1bbcae5adaad2d8f026194002f54913be5ee0933 (diff)
downloadqemu-4b7b20a3b72c5000ea71bef505c16e6e628268b6.zip
qemu-4b7b20a3b72c5000ea71bef505c16e6e628268b6.tar.gz
qemu-4b7b20a3b72c5000ea71bef505c16e6e628268b6.tar.bz2
elfload: Fix alignment when unmapping excess reservation
When complying with the alignment requested in the ELF and unmapping the excess reservation, having align_end not aligned to the guest page causes the unmap to be rejected by the alignment check at target_munmap and later brk adjustments hit an EEXIST. Fix by aligning the start of region to be unmapped. Fixes: c81d1fafa6 ("linux-user: Honor elf alignment when placing images") Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1913 Signed-off-by: Fabiano Rosas <farosas@suse.de> [rth: Align load_end as well.] Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-ID: <20250213143558.10504-1-farosas@suse.de>
Diffstat (limited to 'linux-user')
-rw-r--r--linux-user/elfload.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index a2c152e..8799e4e 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -3351,8 +3351,8 @@ static void load_elf_image(const char *image_name, const ImageSource *src,
if (align_size != reserve_size) {
abi_ulong align_addr = ROUND_UP(load_addr, align);
- abi_ulong align_end = align_addr + reserve_size;
- abi_ulong load_end = load_addr + align_size;
+ abi_ulong align_end = TARGET_PAGE_ALIGN(align_addr + reserve_size);
+ abi_ulong load_end = TARGET_PAGE_ALIGN(load_addr + align_size);
if (align_addr != load_addr) {
target_munmap(load_addr, align_addr - load_addr);