From nobody Sat May 4 07:25:05 2024 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; arc=pass (i=1dmarc=pass fromdomain=outlook.com); dmarc=pass(p=none dis=none) header.from=outlook.com ARC-Seal: i=2; a=rsa-sha256; t=1599226883; cv=pass; d=zohomail.com; s=zohoarc; b=RKyPIa7MtVbh++ONbhdTheeJTLD+knfu5PQ7/tMw+A4Ss8WquEpdW3cJu8m+1v6rC77UAfsaNAZgtHLbVXP3lejtWQ5ZRyO90GpWxvcXu9FQpc3vjSIv6PczQ1WoR2i+Eeroeq5ZQRY2/YE5TyXoFzEk2cUKiX0xDdm3+7kacZY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1599226883; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=fAXWXHgjpw744eVKukOUu2jTxbEVSUyIt674GtuASkg=; b=WFQcITVXXMcMnF9gJezWUJnNmLw+sxe1FnVL+w3W71Onn7NXCFqaUzOXGrrmyuBJZpdwFF6Tv3a+kaE4sr99kqoIXwwPcU2pq0+P0wcWxJC/ezkWnCMg1pEMpThyZRiFXefxr1AE9jPTf+K8hF5rbKV9q34YPYrQUlexAs6M3Qc= ARC-Authentication-Results: i=2; 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; arc=pass (i=1dmarc=pass fromdomain=outlook.com); dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1599226883990356.8758898002218; Fri, 4 Sep 2020 06:41:23 -0700 (PDT) Received: from localhost ([::1]:48254 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kEBxz-0006cE-1V for importer@patchew.org; Fri, 04 Sep 2020 09:41:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38610) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kEBCC-0008Nu-GX for qemu-devel@nongnu.org; Fri, 04 Sep 2020 08:52:00 -0400 Received: from mail-oln040092254042.outbound.protection.outlook.com ([40.92.254.42]:6116 helo=APC01-PU1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kEBC9-00080H-QZ for qemu-devel@nongnu.org; Fri, 04 Sep 2020 08:52:00 -0400 Received: from HK2APC01FT034.eop-APC01.prod.protection.outlook.com (2a01:111:e400:7ebc::41) by HK2APC01HT037.eop-APC01.prod.protection.outlook.com (2a01:111:e400:7ebc::345) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3348.16; Fri, 4 Sep 2020 12:36:35 +0000 Received: from TYAPR03MB3214.apcprd03.prod.outlook.com (2a01:111:e400:7ebc::49) by HK2APC01FT034.mail.protection.outlook.com (2a01:111:e400:7ebc::191) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3348.16 via Frontend Transport; Fri, 4 Sep 2020 12:36:35 +0000 Received: from TYAPR03MB3214.apcprd03.prod.outlook.com ([fe80::20e6:9040:b49a:ec5d]) by TYAPR03MB3214.apcprd03.prod.outlook.com ([fe80::20e6:9040:b49a:ec5d%3]) with mapi id 15.20.3370.012; Fri, 4 Sep 2020 12:36:35 +0000 Received: from localhost.localdomain (202.189.3.253) by HK2PR06CA0001.apcprd06.prod.outlook.com (2603:1096:202:2e::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3348.15 via Frontend Transport; Fri, 4 Sep 2020 12:36:34 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iKNTJmXO9ofCZOkqMLAHlsxEpZtIvr3LAKX++gKVNATzA6MmNL2WWgN928nT4v/GrKw0OUc+kmUhwIS3xWAI9ur0O+CIVWQxx5x4yyt40lXUvFWEmhvwfRPqI18YZFq/k4iP6c7XlVv1HT40VGGan/37L7enlkwzwPZPxFAMxVQYkSw1O5YdRHNE7xcHc86kE4/fH2CI0Zb5rCZ5gEAtteUWTcYEtBdvadDaaxR8NaR9uHF4pjGESBcS3skr0REIi1uDFcZgOcjJaublsVCGd4MpmqeFYXdjkt5DTn2zWXfGUYDwOkklExKmEqqccYTmDb4LBYrKX/d2LdvZOMM6uA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fAXWXHgjpw744eVKukOUu2jTxbEVSUyIt674GtuASkg=; b=lyEbdWGOnJGNgJPmZ/6cT7ya5Oro1gcLXPsVPIULrSkT6uZSxYk4dbwx/JK/eRTK3CmmlyyHxbJaQwsJb92bBgBYenu3qi7Cg1UViRPVLGEpAxW9QVWuqEDJak7NenxA6GvWNdVn29cgWBnnXGDawAkXixJgsmXu12/zoLFzDEetwWP6+BFpfNhZE2BiSZGx+pUSXoqBFEaAtsYjpMASTjTWkfl0jtPfsdPhvquDGd9AhLQ9knJorNxcDP7WyiHBhG4xZXgB7bv5flfgSXYkC850u5vA89sq9oVQa/qoAZj6vD/684g1j0sQ3eVP2UkEt5a3dcJnOk3ggirdkwzw5w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fAXWXHgjpw744eVKukOUu2jTxbEVSUyIt674GtuASkg=; b=djDV4a9ZEY7ZMhfHMAsAj9iU2t+vdIPOeAdQHUbVUwDSSWdvC9uHWhnyyBFA83Dc3jHCBlJXDLIU0i1G6PIu060wz+8/fH3lhXgshKw9uZnV5ylAZmv9i2ZTzokX+mt3AGvTpFU957vJ88QSJIkhitw1qmSdmQYba/CE1KiZrNcmWOHwZuk1KkVhRAGvIXZlTV4kkDxumHNSCovtLWqZPt7sFS8sqYZaLpe8OzRuiHoqraZfxJeom5uDogepMtqMg+oSSP3weBa10t1Bi8Z86yxAZLtlOaVoNKjrxTQuJpU9YUwr23FAFK+ukk9HlZXGYuWSMFbeltIjx0T75Ry3iQ== X-IncomingTopHeaderMarker: OriginalChecksum:4B0FBDE920605730933162D0F42BE0D17ADADE2F3F918D746E90C8162E9B6444; UpperCasedChecksum:7B0A0CC6378C1A1E9917EB594F1ECF8F1DB867AF7C453DBF5BB57DC1CDC91CC8; SizeAsReceived:3284; Count:46 From: Xie Benyi To: qemu-devel@nongnu.org Subject: [PATCH] Linux-user: umap redundant reserved memory in loading ELF Date: Fri, 4 Sep 2020 20:36:25 +0800 Message-ID: X-Mailer: git-send-email 2.25.1 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: HK2PR06CA0001.apcprd06.prod.outlook.com (2603:1096:202:2e::13) To TYAPR03MB3214.apcprd03.prod.outlook.com (2603:1096:404:18::21) X-Microsoft-Original-Message-ID: <20200904123625.30273-1-xieby1@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.25.1 X-Microsoft-Original-Message-ID: <20200904123625.30273-1-xieby1@outlook.com> X-TMN: [2h4SHPjpWyvAoI1LntMX/UhGUTvSq8xn] X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 46 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 253b80df-954e-46ae-5a2d-08d850cf2904 X-MS-TrafficTypeDiagnostic: HK2APC01HT037: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PBj648qAvmTDePGIvh2WkO+ELLJF6MxeCjipn9KaRmR/oa14M9LOtxKVLpSNHOOxhm31VsgQ8hyxXDWZ8QmqET7pGNWfmZkcgx2MrdwcGP9Hlc/kz0q4RPJq0TbVHYp2XV0+tKae8WlGRWSqxbvRJyVcmu9lxsYmjzKt5Ttyt0qmhmfkdu131+jrrOi9QuGm X-MS-Exchange-AntiSpam-MessageData: UZHcV1mM28mTodrCtjAzV75ZJN56GrCdkL9YpPMWG+z8IqOYCMG1x12e+20bxtLb1sMQpkLLVnvcxuYG5YqMNHFSL9BgHg1V4xR4eb2cFp0K1eemZ3lvpjq4KyZPW8XxaIgxSoCAk65hsJM4dsoiSw== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 253b80df-954e-46ae-5a2d-08d850cf2904 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Sep 2020 12:36:35.2426 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: HK2APC01FT034.eop-APC01.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: HK2APC01HT037 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=lists.gnu.org; Received-SPF: pass client-ip=40.92.254.42; envelope-from=xieby1@outlook.com; helo=APC01-PU1-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/04 08:51:54 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Fri, 04 Sep 2020 09:38:16 -0400 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Xie Benyi , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @outlook.com) Content-Type: text/plain; charset="utf-8" When loading ELF, linux-user reserves address space, from the lowest address of all segments in the ELF, to the highest address of all segments in the ELF. If the segments in some ELF file (for example, wine) scatter among the whole guest address space, then Linux-user will reserve almost the whole guest memory. As a result, the guest application has nearly no memory, which causing mmap system failed. So unmaps redundant memory which are not needed by the ELF segments. Signed-off-by: Xie Benyi --- linux-user/elfload.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 04c28cb..6c5d449 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -2494,6 +2494,26 @@ static void load_elf_image(const char *image_name, i= nt image_fd, goto exit_perror; } load_bias =3D load_addr - loaddr; + /* + * Unmap the memory which not needed by ELF segments. + * + * Instead of directly reserving the needed memory space, + * we first target_mmap all space betwenn loaddr and hiaddr, + * then target_munmap the holes between space needed by segments. + * It is because directly reserving the needed memory will call + * target_mmap several times, which may result in different + * load_bias for different segments. + */ + abi_ulong munmap_start =3D -1, munmap_end =3D 0; + for (i =3D 0; i < ehdr->e_phnum; ++i) { + if (phdr[i].p_type =3D=3D PT_LOAD) { + munmap_end =3D phdr[i].p_vaddr - phdr[i].p_offset; + if (munmap_start !=3D -1 && munmap_end > munmap_start) { + target_munmap(munmap_start, munmap_end - munmap_start); + } + munmap_start =3D phdr[i].p_vaddr + phdr[i].p_memsz; + } + } =20 if (elf_is_fdpic(ehdr)) { struct elf32_fdpic_loadseg *loadsegs =3D info->loadsegs =3D --=20 2.25.1