From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.openvz.org (unknown [69.168.225.77]) by lore.virtuozzo.com (Postfix) with ESMTPS id 9DB528017D for ; Fri, 9 Oct 2026 14:34:08 +0000 (UTC) Received: from mail.openvz.org (localhost [127.0.0.1]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 699EWpou008628; Fri, 9 Oct 2026 17:32:52 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 699EWpou008628 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="zFK+XQvx" Received: from mail-pj1-f72.google.com (mail-pj1-f72.google.com [209.85.216.72]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 699EWnoM008624 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Fri, 9 Oct 2026 17:32:50 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 699EWnoM008624 Received: by mail-pj1-f72.google.com with SMTP id 98e67ed59e1d1-3aaee1fc104so3281083a91.1 for ; Fri, 09 Oct 2026 07:32:49 -0700 (PDT) X-Gm-Message-State: AFq9FYLebhKSAIU1cSKO+myVHhvYjTr+XGrPEImLYAYMubRfOVv+NBrd dCyXESZLSoM0OAwTwr2fzPkImju7gbzIJ/lVC02EB71dHwt94hX/VOLLz6aNjqOwVnlSIUZmaKV 15b/OxBLAqUEfzRKLqYzjSpWCbzsRpeGou8ZqB18myAuGsnNyYaC1dA== X-Gm-Gg: AYBFou2ANjyNqcS2d/FR6HkoIccUDa4gJONZ/FaHZ3NsXMHWBhZv1xIIIaBlOdtHisR 6QdCUTDhBlrRlMTQMBWvGhpKuhR+YaCy/G4GojKEhg7APGMV7fjRjDhLSzvU+ZXMmcXGF4Qkud+ lpIKE+A2T1gt8jypTeoeVCysP2KfINcQGPzXknHPq5f2O4b2x6JGlY5IZaLuSqqpjoJo1FhF5a+ kg7+z8Zp1mCd7A88BTzd0ToBf3AUkud0hLBPbciXL4ldDHQVCPfYT+u0X1Eumg+IEf4rG4Bldtn oA4WRuYL2MXqA+3MeDXQSyRWiwPkYpRg+tkvDpa1LcSbzA6L7Usvzib3fCAxH1e2ZmBl/4WHYj1 l2u+2HOdAmRHsKhIM5Mce+508yLUwOJwtiGS9aXG7DiN8+QiBGdUm2RXWYio8kQVUxMaF0RfgbJ hBvzbx3uQWEXBzN6JF+EvaOcEtUOi44fc= X-Received: by 2002:a17:90b:17c1:b0:3ab:1b19:78f6 with SMTP id 98e67ed59e1d1-3ab3ac6abd7mr2320638a91.49.1791556368411; Fri, 09 Oct 2026 07:32:48 -0700 (PDT) X-Received: by 2002:a17:90b:17c1:b0:3ab:1b19:78f6 with SMTP id 98e67ed59e1d1-3ab3ac6abd7mr2320597a91.49.1791556367807; Fri, 09 Oct 2026 07:32:47 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1791556367; cv=pass; d=google.com; s=arc-20260327; b=ctxfhuxC1stvyc+8+DNyKLU1ILueHA9XAM6H0UOK2j2ck4Txv5gDjACDtWuIa0YrVb cWPRvDybqievIfuIr14wdrqKkEuYc5kgTC6rHb+9oiA94AHMCcbl4A0ZRy6hcoeCPIku JwcWPBi7OsomotQu7Pqmi2SXP4/uWjaq+Ck4NjfY/892xSR6X7xp5d+sMJXFTYCd5s+u pM98k0qk/KwDcAbkVsogQ52ZWv5PqdcU7KXTNvz5m8hfkXRBLcvMhVj1S1Ql+MtfqRYZ 9JWWEW0WAHhEAin502YJClZYZ9ot04yXIKohU9xQIRvCQ1rb4jFtWYB3DQbafxKzaNcV 4SEQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=mime-version:content-transfer-encoding:message-id:date:subject:cc :to:from:dkim-signature; bh=HP6Bl58V2aqzFpjBEyqXYsF0apRQD+r/XDZwkD8Ys0c=; fh=IAlcPCVC9X8jkghYNg62DDOA2Ho2HO+S8vmVvyzgKE8=; b=PAoRatBesywejpzOaUrvrpQ45nYP2dNk5iKD1SLIhx2daoqD07G32LSHiZFRzR3gsl Vt9eANlyXIrqzIoydq+yNP04heCRWvQ7J6kw78OsDNZhxhzH63BzygTIym4e95MN3GTv 2Zu2TucP+KPnsXxaDY/Mw6ob8nB+g/J6XwqBFO2xlcnV3XuPUAQpwfzQOIrqQG6Co86P qkyM54ZiTrtEE1OoOtGwKt1nJaJNN3PV1TUxFQHHBd6mdyrb6sq4F/F86WKWrXWjBBSB pSkmx77stB8I+04bH7Iub5AVIwNbIBk4B/hd5kxZkWMfyvn+rH5yzMcqrC7nhH6aUxhZ A32A==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=zFK+XQvx; arc=pass (i=1 spf=pass spfdomain=virtuozzo.com dkim=pass dkdomain=virtuozzo.com dmarc=pass fromdomain=virtuozzo.com); spf=pass (google.com: domain of andrey.drobyshev@virtuozzo.com designates 2a01:111:f403:c200::5 as permitted sender) smtp.mailfrom=andrey.drobyshev@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazlp170120005.outbound.protection.outlook.com. [2a01:111:f403:c200::5]) by mx.google.com with ESMTPS id 41be03b00d2f7-cd3d9e4cd69si3839083a12.44.2026.10.09.07.32.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Oct 2026 07:32:47 -0700 (PDT) Received-SPF: pass (google.com: domain of andrey.drobyshev@virtuozzo.com designates 2a01:111:f403:c200::5 as permitted sender) client-ip=2a01:111:f403:c200::5; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=zFK+XQvx; arc=pass (i=1 spf=pass spfdomain=virtuozzo.com dkim=pass dkdomain=virtuozzo.com dmarc=pass fromdomain=virtuozzo.com); spf=pass (google.com: domain of andrey.drobyshev@virtuozzo.com designates 2a01:111:f403:c200::5 as permitted sender) smtp.mailfrom=andrey.drobyshev@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eS/j3WRBGFc+juNOwcfvExRoOqmMbGySGZvKru2jYh+S62M3CaZAx+cwSgQxKNTr0Nvsff2SYInfVSJvzFV13yxkxoe/N0JBqIJdxijXyr00kh8xdESAlgbq8uy/1Ywq9cmsJGD5MXSbVMz0PnrzN7GQkJNHh5emIxkh7i0jSY/Bpq/VacYK/SL0c2ADBCP6fIEIEqumscY+EWybyRLaxErXDYPabqu+oM/Qr7+TPkNv0qlDkvCbb0IhnNxrq+ufc7SRtykCTWJAOs8rB0KvARixtIUhkvhuhW1J/u4qH2JA3w8hQKskbcI7bkVVBMKgDfCZBgESfrfMfygIcamqgA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=HP6Bl58V2aqzFpjBEyqXYsF0apRQD+r/XDZwkD8Ys0c=; b=X7MWrgLQZvNd0Epu8Pldx3mOYUQaaIPHzcPV+eggCKzdJ50ZKbFMRe9G/bdsjHpwOPGDINCnPMDxiDMpzENhajr1xdMxtSlXEQ1ipPk+ZJFyaBMin57I80dAragwjgpTCSLOEaSQn7IXLgDB6pMB/m+rKIXdPvPl7OxH2CH69YSvU5yMD9pE41sY2y3dlQDgWdKxFgDLx8/aozhpYKHkF+EIh9qDtaPNve7Cke60iVPlWNylzYAq336Zq9tqPGHn2UTN9LOPjJUIKB6ExhGAwfyjBu56dvn7KcCxPG3QB22hwaRKfRBh2G1tDR2fCpdVHncQ3E4Aw0fpAINHA/9Bfg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HP6Bl58V2aqzFpjBEyqXYsF0apRQD+r/XDZwkD8Ys0c=; b=zFK+XQvxF8qPR+vz++S1cyjFmiVWv5KiF5k5vo0E5e6Ezdc1Ws5C50ojPXg0cnjt259VZvlMMJFCLOi6mxGjuzVbJeOYdJwPHxtgjfsquzyev1LNXlM8h9Itjrj92QRf1/cVAtoMAm0Abc6rlTp8ugSZS9EfE8s6+ouA31v9sdAicm33gWbFe31SFkp9+CH1UDyuLWFfZ8y1thNiV9ECoAfNVhURsUWY+exPWiudJVSGIuqNQwmA7Cr1/+btcDKYqCSZRTG2T6oJdgFmzCysli7fnnUn3u+SJOjQ+VZ3k6HzGA2ZIpqGwMWfve+UoCO6UBkKsrK7DMXlcOv8ObtXrg== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AS1PR08MB7474.eurprd08.prod.outlook.com (2603:10a6:20b:4de::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.15; Fri, 9 Oct 2026 14:32:41 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0496.010; Fri, 9 Oct 2026 14:32:41 +0000 From: Andrey Drobyshev To: devel@openvz.org Date: Fri, 9 Oct 2026 17:32:27 +0300 Message-ID: <20261009143227.492150-1-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 X-ClientProxiedBy: VI1P190CA0002.EURP190.PROD.OUTLOOK.COM (2603:10a6:802:2b::15) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AS1PR08MB7474:EE_ X-MS-Office365-Filtering-Correlation-Id: 8c883c91-d083-4651-7f1b-08df26122c85 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|52116014|1800799024|23010399003|366016|5023799004|38350700014|56012099006|18002099003|10067099003; X-Microsoft-Antispam-Message-Info: QlwoUVXGwkHWgAJWxXgycTpG7xfy5CwOzVqJ48ZlTg05aQvWnnyNG0nda0BG2Hz2myXzbiEpMj1CDwi8LVY0j/I9lDZU7XS/BgOUZ9oVzJL24wuk5aG8on1X/iA7qt9btfdeN1dbqpKyAsxQX8MFSnLginiFAV9msC8I62DW/TxtcP6ta6567IrIFnLMG9ioReGu80oRd/MCPvd5hLHKtis20yvA3ESmgT0vOZvLRt6QzI75oB7SHAvKo9urKNQxEkzl7cAvX2oj5HpbVzkeRMAjmdLCH3PAbG9Z5dCZl4b/yCKvMP7WHIzX3UQ0+ex4we/AGhv+O1QCXZa5tLF9PA+QlWq2Sl1KgyQQ92Vid2L8qmGwL9e9KfjhpL+HBL9Tkjx8mIaWt81LuD28UZMgy76rpjA4dxMpvQW+bAk3/QQFjk7F5GQ0j9RDEbeq/uVMG4XNr+7VVn7PPf2am048H+YPMuGbFdzL3duYAlp1K/Sh4SkgKy/SV7N4VfM7iVoatJnfR+qKj3k99PCtr/9O1d3zKxs67cpRaLnb1D9ShagrlIfbPisAveG/4UY4WSOPThxrqbSf1PCISijZ2DPZEg5vX0ZIFFwml9NNViYO11ZRjQAVOsbFxpjDNj3RcgNldpwDaLMgNwYUfp7m5AzhAmLXtaHGGE1l6eGo2cB/lm5q/mcP2qyc7nlmiqCV/w6HCQq+WpY2HI4zDNHYL2Yn3Jbm1hYYssWIIUKPJXUxp8Q= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI0PR08MB10656.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(52116014)(1800799024)(23010399003)(366016)(5023799004)(38350700014)(56012099006)(18002099003)(10067099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?cCpWMftp6XwN/DyIWjorqtun9UwaB57aIFQENFZ9HN3Ue2kNwwlhqwLgDBBs?= =?us-ascii?Q?Am9BtosOzJIILPEa5Bvp4+y7Xnt1aYDnAqh5TeY1FI5e51g41f0cjvpJGMYo?= =?us-ascii?Q?bp5MBIQH+T8LYyegz1vCyP3+2VW+YS0lwSvrK7Fyoi99sn95R0fhMzoyf40v?= =?us-ascii?Q?XbiI0mk8MnxbVbfdaJoSyPzzF+0WyCi3iYk2LXqsk7QxNwBOohjQXehXJNBF?= =?us-ascii?Q?fq6nT3NZYj5P1lfY5kVxpYpLgzOBCsqNe6dNfTD3iB5brcYHbpH2LbcHBkDp?= =?us-ascii?Q?eoZxGt8r2zCM3vNEzkaWS84bubz+U+J/ZC36Okbhutf6gEdoG3cEtqP5Tkx+?= =?us-ascii?Q?8XIMC+BZN2pbH01WXzCOJVsmKQYVxy2J9NRLQU4CVeJQC0U+sRXIT8MBvish?= =?us-ascii?Q?pZCQgBaCudB4VjC7XJreykaRkD1Y7Kqb9DNnHgf5uWMOEiSlvmotnRreOXtG?= =?us-ascii?Q?vbJuGxilXV5qg9wo6/7IUCBBH0AmamDUv09UtV/tgfQwyCHHSPUsM6Huilz1?= =?us-ascii?Q?B6hfNF8Ro+UXRNTUeh9y35Y39x+3Qxg8OKtL0bJ24ct7DxqIMThc5q0SsJ0F?= =?us-ascii?Q?m3CqMRU+PqeIi1mHJ8Cwzzo87KOsUQA1KMneyB5Wjwf07SODY/btKTbnAsp2?= =?us-ascii?Q?kZTKQmgAhMPOl+oTJraLG8aHt1a7NEzofLFTRkNLLOTJkcN53ymWkRYMzeI/?= =?us-ascii?Q?ss/bXaeSHHtJQjZ6c5cRkemn4py8mI5zLdtB9vgy599aXLyZdGrPaFaIxHh7?= =?us-ascii?Q?aEjBbztFdablqd980mVCfR98HefakHCITWgNDNYRz8f0OlJUeTR5AytRGqxW?= =?us-ascii?Q?N4Jv20b1cmE3FQCzrwBdZH9N3bRVlZ58Fc1iR6VXVlIGrd0A1zr2mbj8zjvw?= =?us-ascii?Q?NBEoxRoCIf7mjKpgDAVzHtrDTx77AAnvC3YLY5OY5964jv0Bj4e8L9ARKW+I?= =?us-ascii?Q?3NQmWFhbhvu3AozTBIr4r9r/rETbAGh3a8ocuDM9lCjc4SmtesiZlvDXGCba?= =?us-ascii?Q?hFdt7yodbHEEZqTpqBkAOkWFBcLVDJ/CoQgnN078mHIpVNnQWZlHTMwZJvPM?= =?us-ascii?Q?bQt/I56PMM/3OkQh6h8qgy6rwSTHVfI4a/WRQyvcaLCJj93vUnnFIgciRdQ4?= =?us-ascii?Q?4vtgXvYzemlSyGBli5uYiJVdG9/JakIrEa00azA87CX8PtSukG5hv1Pz8Rwb?= =?us-ascii?Q?AJ2noQp5l14XjryZAZgxqdW5EX0j7PIUX+PIQ3wIWj7hrIcIOynobN7szRUj?= =?us-ascii?Q?zU7GBBmKJezDk7PSzZRjldkEiowpmS6I1r0wrz1d/iSDKqIgudcRkkF9ZE9v?= =?us-ascii?Q?gFk4FFa9rkdaXAX6km2ZCVaRL0sEr2ZnAJ5bj9iCxoiIuds7mwaWXqskFBg/?= =?us-ascii?Q?7F4fldA+DOahrox+Eeab/6a0fcBDUDkrNCy58Dn8H457g9UWIPL7kwjxo3Mx?= =?us-ascii?Q?UcwD1yO3S/bv61oFIIrAZccS3BVVk67RLRlglYRY/f973+MKlKnIsKN5yvks?= =?us-ascii?Q?PdLc8e+B6XCpjwyHZ9AAuKHfUvPGQBZEtQlBhsBc1O7hsuH9qQu0SSKwuCy7?= =?us-ascii?Q?oeMOLPp2mkLlHrXMmXxcI0B7+wCb3JruvXD6fqsqc55q/S3ZdfLde5rOsHg/?= =?us-ascii?Q?efgqRkrrnBNUHM/tJqXcGr/kH1qQDpdTupaH9Ajev7td5j4yZB85lrWLs9Yw?= =?us-ascii?Q?MT4RdKHxyv7XxwaDOSXjTNpzrPIvSwlCUYr+jy5gElDl7MvUc4QmCl/ajL42?= =?us-ascii?Q?/PuBJLqdNOYz373DXFCFGXd31aJycUs=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8c883c91-d083-4651-7f1b-08df26122c85 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Oct 2026 14:32:40.9531 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ijmZRUujPVidYc9HrW/ipp8IG6umAo+8qD4ROGwdcI+jEYB9+t6NGaQ8g8koL3d0ZnBPr2eOvv+FgKgi+EPVzi/qkJSxCjo9kXVC6ZBq9dY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR08MB7474 X-OZ-Fwd: true Subject: [Devel] [PATCH hci-8.1] mm: allow MADV_DOEXEC on shared PFN mappings of device memory X-BeenThere: devel@openvz.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: OpenVZ development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: devel-bounces@openvz.org Errors-To: devel-bounces@openvz.org QEMU live update (cpr-exec) keeps guest RAM across exec with MADV_DOEXEC, but VFIO device BARs mapped into QEMU are lost on exec, and the new QEMU has to mmap them again on the same device fd. Some drivers don't allow that. The NVIDIA vGPU VFIO driver records each BAR mapping and refuses an overlapping one with -EINVAL. For VF BARs the record is dropped only when the device fd is closed, so after exec the new QEMU can't map BAR1/BAR3 and the vGPU becomes unusable. Let MADV_DOEXEC also preserve shared VM_PFNMAP mappings of a file, such as VFIO BARs. They have no struct pages and nothing to copy-on-write, so vma_dup() duplicates them the same way fork does for a shared file mapping: take a file reference, link the VMA into the file's i_mmap (so unmap_mapping_range() on device reset still reaches it), call vm_ops->open() and copy the PTEs pointing at the device. Such a VMA may have no vm_ops (when filled with remap_pfn_range() at mmap time), in which case vma_is_anonymous() returns true for it. So the new vma_is_shared_pfnmap() helper is checked first. https://virtuozzo.atlassian.net/browse/VSTOR-103860 Signed-off-by: Andrey Drobyshev Feature: oracle/mm: MADV_DOEXEC madvise() flag --- include/linux/mm.h | 12 ++++++++++++ mm/madvise.c | 11 +++++++---- mm/mmap.c | 38 +++++++++++++++++++++++++++++--------- 3 files changed, 48 insertions(+), 13 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 75b8bcd9f442..0f3ad979f980 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1018,6 +1018,18 @@ static inline bool vma_is_anonymous(struct vm_area_struct *vma) return !vma->vm_ops; } +/* + * Shared mapping of memory without struct pages, such as a device BAR + * mapped through VFIO. Such a VMA may still have no vm_ops (when the + * driver populates it with remap_pfn_range() at mmap time), so it must + * be tested before vma_is_anonymous(). + */ +static inline bool vma_is_shared_pfnmap(struct vm_area_struct *vma) +{ + return vma->vm_file && + (vma->vm_flags & (VM_SHARED | VM_PFNMAP)) == (VM_SHARED | VM_PFNMAP); +} + /* * Indicate if the VMA is a heap for the given task; for * /proc/PID/maps that is the heap of the main task. diff --git a/mm/madvise.c b/mm/madvise.c index b89d891e122c..f24004e3c6f2 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -1309,11 +1309,14 @@ static int madvise_vma_behavior(struct vm_area_struct *vma, break; case MADV_DOEXEC: /* - * MADV_DOEXEC is only supported on private, non-executable, - * non-stack anonymous memory and if the VM_EXEC_KEEP flag - * is available. + * MADV_DOEXEC is supported on private, non-executable, + * non-stack anonymous memory, and on shared PFN mappings + * of device memory (e.g. VFIO BARs), if the VM_EXEC_KEEP + * flag is available. */ - if (!VM_EXEC_KEEP || !vma_is_anonymous(vma) || vma->vm_flags & (VM_EXEC|VM_SHARED|VM_STACK)) { + if (!VM_EXEC_KEEP || vma->vm_flags & (VM_EXEC | VM_STACK) || + !(vma_is_shared_pfnmap(vma) || + (vma_is_anonymous(vma) && !(vma->vm_flags & VM_SHARED)))) { error = -EINVAL; goto out; } diff --git a/mm/mmap.c b/mm/mmap.c index 320f397816df..fd73b80b04e1 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -1751,16 +1751,21 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) } /* - * Duplicate an anonymous VMA into a new mm as part of preserving - * it across exec. + * Duplicate a VMA into a new mm as part of preserving it across exec. + * + * Anonymous VMAs get their pages shared with the new mm fork-style. + * Shared PFN mappings of device memory (e.g. VFIO BARs) are duplicated + * like fork duplicates a shared file mapping: same file, same PTEs + * pointing at the device, nothing to copy-on-write. */ int vma_dup(struct vm_area_struct *old_vma, struct mm_struct *mm) { struct vm_area_struct *vma; unsigned long npages; + bool pfnmap = vma_is_shared_pfnmap(old_vma); int ret = -ENOMEM; - if (WARN_ON(!vma_is_anonymous(old_vma))) + if (WARN_ON(!pfnmap && !vma_is_anonymous(old_vma))) return -EINVAL; if (find_vma_intersection(mm, old_vma->vm_start, old_vma->vm_end)) @@ -1778,9 +1783,13 @@ int vma_dup(struct vm_area_struct *old_vma, struct mm_struct *mm) goto fail_nomem_policy; vma->vm_mm = mm; - ret = anon_vma_fork(vma, old_vma); - if (ret) - goto fail_nomem_anon_vma_fork; + if (pfnmap) { + get_file(vma->vm_file); + } else { + ret = anon_vma_fork(vma, old_vma); + if (ret) + goto fail_nomem_anon_vma_fork; + } /* * Clear functionality that should not carry over to the new @@ -1791,10 +1800,14 @@ int vma_dup(struct vm_area_struct *old_vma, struct mm_struct *mm) vm_flags_clear(vma, VM_LOCKED|VM_LOCKONFAULT|VM_UFFD_MISSING|VM_UFFD_WP|VM_UFFD_MINOR); vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX; + /* Also links a file VMA into the file's i_mmap, for unmap_mapping_range() */ ret = vma_link(mm, vma); if (ret) goto fail_nomem_vma_link; + if (pfnmap && vma->vm_ops && vma->vm_ops->open) + vma->vm_ops->open(vma); + /* * Now that the dup vma is inserted into the mm, clear VM_ACCOUNT * from old_vma. Since vma_dup() is only called during exec to @@ -1807,17 +1820,24 @@ int vma_dup(struct vm_area_struct *old_vma, struct mm_struct *mm) */ __vm_flags_mod(old_vma, 0, VM_ACCOUNT); + /* For PFN maps this copies the device PTEs and the PAT memtype */ + if (pfnmap) + ret = copy_page_range(vma, old_vma); + else #ifdef CONFIG_PADATA - ret = copy_page_range_mt(vma, old_vma); + ret = copy_page_range_mt(vma, old_vma); #else - ret = copy_page_range(vma, old_vma); + ret = copy_page_range(vma, old_vma); #endif vm_flags_clear(vma, VM_EXEC_KEEP); return ret; fail_nomem_vma_link: - unlink_anon_vmas(vma); + if (pfnmap) + fput(vma->vm_file); + else + unlink_anon_vmas(vma); fail_nomem_anon_vma_fork: mpol_put(vma_policy(vma)); fail_nomem_policy: -- 2.47.1 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel