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 <faro...@suse.de> --- In the bug there was mention of the vdso landing in the wrong spot, but I don't see evidence of this in my testing. Looking at the addresses in the bug report, there seems to have been a mistake because I don't see an overlap there either. --- linux-user/elfload.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux-user/elfload.c b/linux-user/elfload.c index a2c152e5ad..05ee5e74fd 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -3351,7 +3351,7 @@ 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 align_end = TARGET_PAGE_ALIGN(align_addr + reserve_size); abi_ulong load_end = load_addr + align_size; if (align_addr != load_addr) { -- 2.35.3