From nobody Tue Aug 25 20:20:39 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=kemnade.info ARC-Seal: i=1; a=rsa-sha256; t=1785948149; cv=none; d=zohomail.com; s=zohoarc; b=Jy7AJW9A7PhSCkQ0hFBFBfeZvfsEJlVuPMomYizMbTSQmrzJtIGouWK6/qkn7uWdQrGNyb5nlzhBJnHLBjVWt8cKnouA49XEHDZOARKpxyNyyJ0CDPH2u+KbCPYEoAESvD2oCGuNoj7uulYeDz8y8278g+EDWy1hPawXySEquLg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1785948149; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=EeY2yJQbNAzRJhoKBpkSSHbYxUogIMXGN8MeXWkTOQs=; b=Z57Xdf2KRzyj8DcSSkgLcEkIo0F2/Tcw1mVSsY/omODOf+3Q92OSgi7OuZTmwlucLH6E5DJUVVBLNy15C4dvQP2adAgbLDX6yJuh+wTbFyBvqA/WOWw70keGyshOvJVds7xIQxuD1O8wtSg0ZQswryVVHYZYxIpXcfgxxThK4yI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1785948149602962.7320043617027; Wed, 5 Aug 2026 09:42:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wregd-0007Ud-JM; Wed, 05 Aug 2026 12:41:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wregc-0007PM-Lr for qemu-devel@nongnu.org; Wed, 05 Aug 2026 12:41:46 -0400 Received: from mail.andi.de1.cc ([2a02:c205:3004:2154::1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wrega-0001kW-U8 for qemu-devel@nongnu.org; Wed, 05 Aug 2026 12:41:46 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=kemnade.info; s=20220719; h=Subject:Cc:To:From:Reply-To:Content-ID: Content-Description:In-Reply-To:References; bh=EeY2yJQbNAzRJhoKBpkSSHbYxUogIMXGN8MeXWkTOQs=; t=1785948102; x=1787157702; b=PXSgy+aQtp6ZyTJQUG/Li5bW9oQloAGlc4v86cioNeyDxhzbS7JMhUpbfQvbJNTOVSLg8b/SW+7 w5JrKlZuNf1H7nW9m/0Ebct0UsCfeYtVmFzL8XTQ3bkLC+Vy4CgziMonySqSsv5eP4JWGqQzW4zS1 cPTgLRz8eHcjnYLvyC2E4Q1j0ynmsWZ8uCQVDnlLw/n+1JiKgnvlovIjWSQkmmwjstnaBSLuj9FA1 FjMSaqDKrF6RGCj1cF9au4xSpC2MjZi6MQORV5RoQZ/1zekfPABzf1Fni/ePr+8raQAT6p7AYkfea yp8Qv9VCkJN11upEyIQLwSsGTf/Ee1iKY86Q==; From: Andreas Kemnade To: qemu-devel@nongnu.org Cc: sre@kernel.org, Andreas Kemnade Subject: [PATCH] linux-user: fix issues with mmap on 4K guest on 16K host and library load Date: Wed, 5 Aug 2026 18:40:52 +0200 Message-ID: <20260805164052.199608-1-andreas@kemnade.info> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2a02:c205:3004:2154::1; envelope-from=andreas@kemnade.info; helo=mail.andi.de1.cc X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @kemnade.info) X-ZM-MESSAGEID: 1785948152899158500 Content-Type: text/plain; charset="utf-8" Strace in qemu: 198005 openat(AT_FDCWD,"/lib/arm-linux-gnueabihf/libselinux.so.1",O_RDONLY|= O_LARGEFILE|O_CLOEXEC) =3D 3 198005 read(3,0x40802570,512) =3D 512 198005 statx(3,"",AT_EMPTY_PATH|AT_NO_AUTOMOUNT|AT_STATX_SYNC_AS_STAT,STATX= _BASIC_STATS,0x408022a8) =3D 0 198005 mmap2(NULL,269428,PROT_NONE,MAP_PRIVATE|MAP_ANONYMOUS|MAP_DENYWRITE,= -1,0) =3D 0x40868000 198005 mmap2(0x40870000,203892,PROT_EXEC|PROT_READ,MAP_PRIVATE|MAP_DENYWRIT= E|MAP_FIXED,3,0) =3D 0x40870000 198005 munmap(0x40868000,32768) =3D 0 198005 munmap(0x408a2000,31860) =3D 0 198005 mprotect(0x40890000,61440,PROT_NONE) =3D 0 198005 mmap2(0x4089f000,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_DENYWRITE= |MAP_FIXED,3,0x1f) =3D -1 errno=3D14 (Bad address) strace outside qemu: [pid 195331] readlinkat(AT_FDCWD, "/usr/lib", 0x7fffd1a7fd00, 1023) =3D -1 = EINVAL (Invalid argument) [pid 195331] readlinkat(AT_FDCWD, "/usr/lib/arm-linux-gnueabihf", 0x7fffd1a= 7fd00, 1023) =3D -1 EINVAL (Invalid argument) [pid 195331] readlinkat(AT_FDCWD, "/usr/lib/arm-linux-gnueabihf/libselinux.= so.1", 0x7fffd1a7fd00, 1023) =3D -1 EINVAL (Invalid argument) [pid 195331] faccessat(AT_FDCWD, "/usr/gnemul/qemu-arm/lib/arm-linux-gnueab= ihf/libselinux.so.1", F_OK) =3D -1 ENOENT (No such file or directory) [pid 195331] openat(AT_FDCWD, "/lib/arm-linux-gnueabihf/libselinux.so.1", O= _RDONLY|O_CLOEXEC) =3D 3 [pid 195331] read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\= 0004\0\0\0"..., 512) =3D 512 [pid 195331] statx(3, "", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT|AT_EMPTY_PA= TH, STATX_BASIC_STATS, {stx_mask=3DSTATX_ALL|STATX_MNT_ID|STATX_SUBVOL, stx= _attributes=3D0, stx_mode=3DS_IFREG|0644, stx_size=3D132612, ...}) =3D 0 [pid 195331] mmap(0x408a8000, 16384, PROT_NONE, MAP_PRIVATE|MAP_FIXED|MAP_A= NONYMOUS|MAP_DENYWRITE, -1, 0) =3D 0x408a8000 [pid 195331] mprotect(0x408a8000, 16384, PROT_WRITE) =3D 0 [pid 195331] mprotect(0x408a8000, 16384, PROT_NONE) =3D 0 [pid 195331] mmap(0x40868000, 262144, PROT_NONE, MAP_PRIVATE|MAP_FIXED|MAP_= ANONYMOUS|MAP_DENYWRITE, -1, 0) =3D 0x40868000 [pid 195331] mprotect(0x408a0000, 16384, PROT_WRITE) =3D 0 [pid 195331] pread64(3, "", 8192, 196608) =3D 0 [pid 195331] mprotect(0x408a0000, 16384, PROT_READ) =3D 0 [pid 195331] mmap(0x40870000, 196608, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_= DENYWRITE, 3, 0) =3D 0x40870000 [pid 195331] mmap(0x40868000, 32768, PROT_NONE, MAP_PRIVATE|MAP_FIXED|MAP_A= NONYMOUS|MAP_NORESERVE, -1, 0) =3D 0x40868000 [pid 195331] mmap(0x408a4000, 32768, PROT_NONE, MAP_PRIVATE|MAP_FIXED|MAP_A= NONYMOUS|MAP_NORESERVE, -1, 0) =3D 0x408a4000 [pid 195331] mprotect(0x4089c000, 16384, PROT_READ) =3D 0 [pid 195331] mprotect(0x40890000, 49152, PROT_NONE) =3D 0 [pid 195331] mprotect(0x4089c000, 16384, PROT_WRITE) =3D 0 [pid 195331] pread64(3, 0x4089f000, 4096, 126976) =3D -1 EFAULT (Bad addres= s) That makes simple commands like ls --version to fail. Tested was arm32 on a arm64 only host. Fix that issue by truncating file mapping and replacing out-of-file mappings by anonymous mappings. Signed-off-by: Andreas Kemnade --- linux-user/mmap.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/linux-user/mmap.c b/linux-user/mmap.c index 423c77856a..4fce6fae3c 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -796,6 +796,32 @@ static abi_long mmap_h_gt_g(abi_ulong start, abi_ulong= len, bool misaligned_offset =3D false; size_t host_len; =20 + if (!(flags & MAP_ANONYMOUS)) { + struct stat sb; + + if (fstat(fd, &sb) =3D=3D -1) { + return -1; + } + if (offset >=3D sb.st_size) { + /* + * The entire map is beyond the end of the file. + * Transform it to an anonymous mapping. + */ + flags |=3D MAP_ANONYMOUS; + fd =3D -1; + offset =3D 0; + } else if (offset + len > sb.st_size) { + /* + * A portion of the map is beyond the end of the file. + * Truncate the file portion of the allocation. + */ + len =3D sb.st_size - offset; + len =3D len + host_page_size - 1; + len /=3D host_page_size; + len *=3D host_page_size; + } + } + if (start || (flags & (MAP_FIXED | MAP_FIXED_NOREPLACE))) { want_p =3D g2h_untagged(start); } --=20 2.47.3