From nobody Fri Dec 19 15:46:32 2025 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E5A1E2E92A2; Thu, 6 Nov 2025 10:46:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762426008; cv=fail; b=bWUYwhFyiuTa0fL4s7x5sXmepsoHKLQTrLW0AMOfi/FhblZwnj90+QGOpq4qJWf662LlJU0J+BGUvGuNro8ZGf5zUW8TCow/MqkbFSEaJUvo6cSnThZMztfmHkL2SXCPlS5yInu0Mn3cRJL96qfbILftBHnkkF9LoUAZitSgqDI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762426008; c=relaxed/simple; bh=OkDeYw8SRt6LCUCi2TwLpLgurc41O05Rxi9B+mdOEFI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Gg8BHYmwxE39oCRSV3WWjdFFWIL5mFc/o2D7On9Ix/b7dSIz+yyXtX2ecfI3gL3OFlFmNNwwubB7qt2FZFvLm0Bym2Vg/lRIZwkB+bHni/1TZMTWvJ0FilbUHUscN3PMDYa6e3OHzK+Ns/AE2i6RIbhm26x3X9O0YImlfmhmJ5s= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=GhA6SjAt; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=Du38w7e+; arc=fail smtp.client-ip=205.220.165.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="GhA6SjAt"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="Du38w7e+" Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5A61EjNo000895; Thu, 6 Nov 2025 10:46:27 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=+fobxX0vDHNAxtYR3Afa3566lQgYw+5tDHxagMmrFN8=; b= GhA6SjAtU73VGs4LQpihsXyZJlQXirBenSZzMFZ9sgScH+GpQ+Vl67HhOp5lsdYc i0X+KK5IBJnP+FEvP4W/cxtlZq6sdPK+CHRnUDFRETwjUf82miBICKRxGDEjriEL Jy4ESXq7Z4PFKkdnfQ7YZs8r8UxDmxUX/JBwv4P+HB8MbvO7lXQCT7BBt/pmBCM5 zq5+lvZx599B7NsVFG9240GRH//7B8rz1sxvkhfNMAE/PnHFuA3cLcfNtiw2IBZG I3MsXciIWaKee/rn1i5/3EnYuOk0uPe43J6rMDhJC+h3p7UQlJaumoe3SH2YjkRK Ik7LmAwm2NpFOlshT3S+BA== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4a89q41xf9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 06 Nov 2025 10:46:26 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5A69w5P1039485; Thu, 6 Nov 2025 10:46:26 GMT Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11010057.outbound.protection.outlook.com [40.93.198.57]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4a58nc01kn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 06 Nov 2025 10:46:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MFtrBf+5yqGUHd4+LHyKcd2DxAFy0n9lVjkuw0GSrVdo9g6VVazS7h8YPFEB7MuaAts9VHDOjLqE13u9jgv9V79Cgf+qH7yfPWMqRBDXtLqhMtfY6pTYTVOhyl8mnCXOVQjbVlbgHNOzPiZD41EIPIPc3/3jq7YNoeS2pdkhnbAhFPoClQmTZxk3usHVbs57YoBqX/RI4fzf0P30lXtyTjASDRGOekxo4D7QIlsCnQQQFYRqyeNSNdc7GGZwGKHd3biwx1orMEeW+3qSJyNLd+SdJt2rYkl3vzLCz8tvBolsIaUz2OUrYBIraUGD7LyQSAKRmAgN4LJXhiTP3nASYg== 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=+fobxX0vDHNAxtYR3Afa3566lQgYw+5tDHxagMmrFN8=; b=kUqS8bHOEZzSGC8flVO6b9zm6DtIc1vs1bGylsd12CZwgLVczR1b4uYaJAuMjozAknEkuppXBsh83GdILM+Wv3n4RTA9gdxO0X4g3T9PtPkD9khOBBMxdmQv+waDOxdJyUyatBQoDtSybbqFlG+1rSf6Tg5aDMXu7JhzCEa41BN+iOs5tjLaGXwCQWsY+8TAD1oEdTrDnkalkGVaySOYwKCKpqwT4ALEybuAMDpGSiaDxXCJJikPQr7/OXfTzBhov78fAVwDGbD2xSu86pinlbnE4aKXow7VRlYgCOOV86mO9UNwbwZHUNNXZy2CH3pp0DhToZn1OWt3hSfqNegJpQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+fobxX0vDHNAxtYR3Afa3566lQgYw+5tDHxagMmrFN8=; b=Du38w7e+skByfudEnn+Qku5/D5ZXqVjpkVtxv6vCl+5w1Bks2MTSX+DuW9os92urGcWu3WmIxLeE+D1saUw7VE946SRJNaEybrFVaJs1NrBVZ7CMotRKuy2aoHniAlaapI/wlZ7kV/vVCLlMfTG8KwpXIeag/d55m/L5p6dSZtc= Received: from DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) by IA3PR10MB8250.namprd10.prod.outlook.com (2603:10b6:208:573::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.7; Thu, 6 Nov 2025 10:46:23 +0000 Received: from DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2]) by DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2%6]) with mapi id 15.20.9275.015; Thu, 6 Nov 2025 10:46:23 +0000 From: Lorenzo Stoakes To: Andrew Morton Cc: Jonathan Corbet , David Hildenbrand , "Liam R . Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Steven Rostedt , Masami Hiramatsu , Mathieu Desnoyers , Jann Horn , Pedro Falcato , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Andrei Vagin Subject: [PATCH v2 1/5] mm: introduce VM_MAYBE_GUARD and make visible in /proc/$pid/smaps Date: Thu, 6 Nov 2025 10:46:12 +0000 Message-ID: X-Mailer: git-send-email 2.51.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0474.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:1a8::11) To DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB8218:EE_|IA3PR10MB8250:EE_ X-MS-Office365-Filtering-Correlation-Id: e3fc300a-0250-46a1-6fb8-08de1d21ba70 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?+s46mkADUrh3laKUeYDUPPaBZagAa9smVYKlEhpuzLYJrJ32t12o3BQjNJai?= =?us-ascii?Q?dsXA9rTczOyflL24qCqOAcBH0uaus3PszKhwDfnJpQGAB/5AzKVQpShirJUD?= =?us-ascii?Q?F4NyS9meCBmbcwGbBMYpmF5VltVdMyGOH5ejHFjGIHZeyN7sdOyLpVoGNlXm?= =?us-ascii?Q?+iEWgknCmW+HOsykAE89NFoq1Cn/BR3Q7dBv3IcjQeXy7xcxYuLd7YDFCfap?= =?us-ascii?Q?cX4Z3RmKOUIj1Ae3I7B9OSX0qyjZGPvVOyWVCWCzwDOQszFCrUaNvKvGyCkg?= =?us-ascii?Q?cQtCuzxnBz3Z8e2gPXKRsIgcjqEcvzrzptIZZJ9hXZl+GumQvIJxWdnbNH3C?= =?us-ascii?Q?yutSVJxFrXZV/cCHtAu38t+JOkiSUQxEcXUgWanhf1lLVYCqbMSvo4zVTO+8?= =?us-ascii?Q?mtaq2//ykVLobL5GQxK+CucQkzXXKWuJ9sMP0zgUgjPDdBr6jWdGbw5qFRnk?= =?us-ascii?Q?NoR/T5XbY6ego3xgkNl8lkANC0t+m+0GiktCIPZ0I0qcKm5paAC55+3lQDvf?= =?us-ascii?Q?YDKXaADn2/DQ2u4W+CvTOW4CkoAdIHtvLZmPUyQl1XjFlGDRX9nnpCgluZ+E?= =?us-ascii?Q?4xr5WSBPilgmE86Sq8ePIfcyAxeB6u7jtf39IHkxQ8J8Wrl3wuiEhvOjPcEZ?= =?us-ascii?Q?egTzt0BYjFmy69IQ8Q+41RuJ9tgJWQeL5O/Iv4qZwWqgmbmXlp3yYkgx9bjN?= =?us-ascii?Q?MwYJMQsKoi/fqIq6Ci4Jis9T6hK6nIovpzCdkxKZjwrXYy6Lya2QDh6sKYMb?= =?us-ascii?Q?SHoVNCN+Ch8BLRrCwU6WcWigvCRFPACz9bKYPVAP2YJ2nJaJ6TkAHr7PKlp/?= =?us-ascii?Q?rIxbxezyAj9u26cmLTWRU5nYmpHhLpE85EpZGRQABqAi409XnUheRLmJUAS7?= =?us-ascii?Q?OXKDs7i2lhmf+hP9gncUIG8NISTVIeEmKF//PY+q17Nd/CvTyDVV92HNNGHo?= =?us-ascii?Q?9CVIXBoIvsHEDvhX5tU16vN3OGbl1FcvleufsBoaAoL7ekD+Di6j1OMwCTO0?= =?us-ascii?Q?e9l95FvNWBSB28TVVzCILMFBPUfYSEiU70R4kXJwAPKwPSry6Igxkq/TCYul?= =?us-ascii?Q?R7HbxU2gLKGgcp1ebO6fZ1Hy5O8FyVnWpuIrkWc6c/OVamdR2yfOzocnWQ6G?= =?us-ascii?Q?7LKKP+kBHaHIuJbPoB5pEgYFQoxeWmPM/pdEsI/li1Vts0e5fHreud9APlO/?= =?us-ascii?Q?jVapHxFw4q66QOs98Ho2gswX8c+KDqPeD7qsw2Ui8NQ7g5a5JisnUjMLcOOv?= =?us-ascii?Q?OBqNV5Fxg9b5WNNGqb5bgg9pWEMFUapc+lmrHqs7YRIOKK0hl9Ym3V4rO5P8?= =?us-ascii?Q?MdaS2l0fE6H6OgPecG+sGOIxtDF8ext3XW46jrpWPOLrLbbxI/+fvVsgn4bK?= =?us-ascii?Q?U7lsAQ5qfdKPTG9d0O7vraa7wPCY7A13NVJlxG7Dtxek1JOrd0UPQiLxrgZL?= =?us-ascii?Q?wFHjuXTHKNUvZUpD1ptr80EOKSQkt2ZB?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB8218.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?AAKbEHWDtv+ZxBpTXlBx5LoW/XDpsWaHVyVAAn36FqYFnJXdfbNKpBXsAVoi?= =?us-ascii?Q?xYOUrLdepfb78bsihHVixJkxGvKOmwXiNS/IQAMKwIwDekTscCkIhAhYGngI?= =?us-ascii?Q?7p22KtFQHj1ROCuhutUGjbjaOoQByaMkyR4yjfyPsmRopS8SZfZ1lIfp4Zf3?= =?us-ascii?Q?wOd/R5Sx1XXJrrlOKCQpLs+GY/HNmMBJnBZHW9b/4z04BBdwrKsXySPmje0x?= =?us-ascii?Q?hc9fOR6vPwb4+9P0rrL9fvG7Ly+wgXn+iZWnl5J8vbJGNQ9eP4qY7JroXAjF?= =?us-ascii?Q?M9yRweqZi4YYpvJgBiM5DO+CXb1iVVIJhKTgvVH2wXMW1FlXn/rCz5rgrY3h?= =?us-ascii?Q?yM327da9+l7qTNv5dM1BTxG/YjzlMeOHwPuVqqBJJX8fghEiX+bKGkvGHyIT?= =?us-ascii?Q?42dJ83b33kfl53+UREJQ+Qy5baMwKtj71dto/dpKQ1Fp62sMBMeTyhk8EQDZ?= =?us-ascii?Q?oVnKkKNauR8/wmZuuhOAh3rVwOPvaXHN+/yu90xDdfC9MJnttoTIZAwBbaya?= =?us-ascii?Q?F7TAIf6jwplrytm9Nu1Gd38X0r4KQGC3wKuKnabaPSOgxBkozPGQtDNCijcR?= =?us-ascii?Q?153aN0SORRO2awOohsNoAs0UiiVMlpFSCKlLoO7XSNi3RggWpi6TcXR11r96?= =?us-ascii?Q?9P7LQHa6dq7gQ19eHW6Hxc827bL0+xEkVL/bwmN/txjO7lU6qIDe1/XbiuZy?= =?us-ascii?Q?cQn7C1KVqGT79jPF1+8RuQPeMZU9d2G/2dsEAsFxHFLsvcW7RIVs/bhwOILr?= =?us-ascii?Q?Ji5GlkpGlbXZcMh6v2KwBbg+iOdH6v9CJPOMUsCSwqbbFCzCwqpm3zLUkByL?= =?us-ascii?Q?X9FYw5ZaW5PCr3K1Fei6mIRuvaVRdqttEpGoJrxRYQsrK0CceSQfPXlgxDmJ?= =?us-ascii?Q?S0vFI7cwXoMfRvZB+Wv57WtN3r6xcEs69GjSEhJ+86i/jDdMIvmxK9YgqYOP?= =?us-ascii?Q?Bjerpstnyf6xdFB+ABmkddr3Fm9/TD3iAbz1+d+4MIBomPDLMVYtMS1CTp9y?= =?us-ascii?Q?YnKCEcqK7Ksns2ku3sai1QzoO/NWBpASevKsCtqJ/FRidTPvqBVv5h4Jm+id?= =?us-ascii?Q?dYDH0q5/PVFPnvI6M5FlEMuwRUyB2BhBzbFfGyvQ79J0N7p/QrybzlkIEcDa?= =?us-ascii?Q?jmKRmPKrcMpWsn3qelct1M6GsE7BezCDrQoq30EbyZKcNz0GogXfIEGZwHRy?= =?us-ascii?Q?reMzAeFSLwz+M1OIDyFOB3FuoU/FVYpDkhst0VWiD/tgQaXbvAwIHvb7ggso?= =?us-ascii?Q?RXF77x7UET0P31YTEk1YhN4TM4hdXdpAnx+zovYBYXTCRYmmXH/NeRzSsYhs?= =?us-ascii?Q?0hgdal71UFewT8TQNGCkj0OkCV1whYObTgYmqAgkQI1EoyZFx+lAjR0TNcwQ?= =?us-ascii?Q?ODgvu8QX3DquhWKNVpaLNlzI0U4wlb/3u48pJ9HKId9Y8qVh1/PSvIO5h+Xk?= =?us-ascii?Q?o7fj/1kxbitqusa0NM0NS0eVe/hXoy1gw0/7y0jUU9IaKgDKglRDWWlwqm0r?= =?us-ascii?Q?xZlFyCf8N7mK2M6hh1iwc1udZYFm5c59bIrSpF5OiQXUcxH+K7YuuhcM43jQ?= =?us-ascii?Q?zhcMwWbIYlcZx3IWX7BfVN+AarhkD1H0SWvFnZBtBQNgeNAWbIc4y+jZf4ue?= =?us-ascii?Q?ug=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 1fafqGfvmhZfNEc+QGZJHqWJb0GdccTUo8YcLkNQ0ymsciocSZJVq8cHhzioSt5vm13ohdoz1O7j1n2uINGQUPc3F6P+iy4vu9Mbi/yDPZ2UBSyIOKdCReIGfzxoloERQ5fTLcGB/xUn0IXgHauSk+ShAruQDjHipmr8yxIA8JGX5YsniBTcSFUzARbiIMR5u4xDDA6d7uuHLBbB//+dPXpTPlpBVvYy+a7OlvVv4QFFZhnwjhzEcZrh2XfkscsXMofbHXi4IK7Gs1tKXKgtlNDbQoIftVeKqWolW8NLD+H2BECbNMO8VX7JPs1ILqIF2aC/YpIEwv8esDP1IcMiTn0Tg2RLiOPQXjV8BLc/2uFy6G9Jf1blH7ZMuqFDAumcsRzL6U3QWhHRO36ywc6mcxujniM04clXnbHQLurpBiJfCYzScDTIdZFEESwPmHsHFOL0EBOQwFKUG/cBDEL0rrnXHoXML02lIBC+J82Nr56ckUlIHBbt7qwmnEj+ofevREqPMvsuhLzj0F+ityFNdfeleFanMWsn3mIi5B9IP38gntXVjtmUQd/0ORiRCMKXlRs5S6BEJ/OzZLvH4/ztpUoeLg5UCNd0gh/RzRLQ5YQ= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: e3fc300a-0250-46a1-6fb8-08de1d21ba70 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB8218.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 10:46:23.3795 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: h94p4qiwDHzWqy70J6Fj1cMuertzqoJcAL9AmL5ixvs51MxYNJdbjScyBynQWhOMVnMzZwaG3NhUVZp0oaHKqZq1kBJ+JFpYv/GnlreECho= X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA3PR10MB8250 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-11-06_02,2025-11-06_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxscore=0 suspectscore=0 mlxlogscore=999 malwarescore=0 spamscore=0 adultscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2510240000 definitions=main-2511060084 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTA1MDEyMyBTYWx0ZWRfX2iTxBMyEn8vi 9ypXUq+u8pRfrPw2S/mGwbMyOhvvrduQk1tZp+KGMm970Oup4uDyKiONxwP12M82MiwsQinF9zJ mVZ5VXJy6N+xmcrV57cIHkZGXLVlFVlR6Nae4wGhwCjGeuMB2QoQOTgYusYA4hVtkkrPMqt9gnm 3Np+gZZfHsIKe+/QoJKk2GLlw/s0zA+J7nmPRJGitxppPFxXPwdOfh17nsUxgJdh3wiStQV6nsp VNtnQX+BN2a9HBDk7+iMX3MW2H8KIr+1lWTp+cCuMw2wJBp6MeGRCZ9SedQveZJZ19cBb35tpq/ fFP6xa0wkgSzQ4rDMkSWoA8uBbp+f146apZ3x67KSia/TtR7fUfAr7+hVY/AOxH+3G9tD5mGh8a vBkQmW6K27SIj3Rk9/m8VTJTmIYbtA== X-Proofpoint-ORIG-GUID: oZGLjQxNm9VRliYUk2phvt4tFMDmHxDY X-Proofpoint-GUID: oZGLjQxNm9VRliYUk2phvt4tFMDmHxDY X-Authority-Analysis: v=2.4 cv=PcPyRyhd c=1 sm=1 tr=0 ts=690c7c82 cx=c_pps a=XiAAW1AwiKB2Y8Wsi+sD2Q==:117 a=XiAAW1AwiKB2Y8Wsi+sD2Q==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=6UeiqGixMTsA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=lkmYoepbxJn_IgOSQAYA:9 a=cPQSjfK2_nFv0Q5t_7PE:22 Content-Type: text/plain; charset="utf-8" Currently, if a user needs to determine if guard regions are present in a range, they have to scan all VMAs (or have knowledge of which ones might have guard regions). Since commit 8e2f2aeb8b48 ("fs/proc/task_mmu: add guard region bit to pagemap") and the related commit a516403787e0 ("fs/proc: extend the PAGEMAP_SCAN ioctl to report guard regions"), users can use either /proc/$pid/pagemap or the PAGEMAP_SCAN functionality to perform this operation at a virtual address level. This is not ideal, and it gives no visibility at a /proc/$pid/smaps level that guard regions exist in ranges. This patch remedies the situation by establishing a new VMA flag, VM_MAYBE_GUARD, to indicate that a VMA may contain guard regions (it is uncertain because we cannot reasonably determine whether a MADV_GUARD_REMOVE call has removed all of the guard regions in a VMA, and additionally VMAs may change across merge/split). We utilise 0x800 for this flag which makes it available to 32-bit architectures also, a flag that was previously used by VM_DENYWRITE, which was removed in commit 8d0920bde5eb ("mm: remove VM_DENYWRITE") and hasn't bee reused yet. We also update the smaps logic and documentation to identify these VMAs. Another major use of this functionality is that we can use it to identify that we ought to copy page tables on fork. We do not actually implement usage of this flag in mm/madvise.c yet as we need to allow some VMA flags to be applied atomically under mmap/VMA read lock in order to avoid the need to acquire a write lock for this purpose. Signed-off-by: Lorenzo Stoakes Reviewed-by: Pedro Falcato Reviewed-by: Vlastimil Babka --- Documentation/filesystems/proc.rst | 1 + fs/proc/task_mmu.c | 1 + include/linux/mm.h | 3 +++ include/trace/events/mmflags.h | 1 + mm/memory.c | 4 ++++ tools/testing/vma/vma_internal.h | 3 +++ 6 files changed, 13 insertions(+) diff --git a/Documentation/filesystems/proc.rst b/Documentation/filesystems= /proc.rst index 0b86a8022fa1..b8a423ca590a 100644 --- a/Documentation/filesystems/proc.rst +++ b/Documentation/filesystems/proc.rst @@ -591,6 +591,7 @@ encoded manner. The codes are the following: sl sealed lf lock on fault pages dp always lazily freeable mapping + gu maybe contains guard regions (if not set, definitely doesn't) =3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 Note that there is no guarantee that every flag and associated mnemonic wi= ll diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 8a9894aefbca..a420dcf9ffbb 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -1147,6 +1147,7 @@ static void show_smap_vma_flags(struct seq_file *m, s= truct vm_area_struct *vma) [ilog2(VM_MAYSHARE)] =3D "ms", [ilog2(VM_GROWSDOWN)] =3D "gd", [ilog2(VM_PFNMAP)] =3D "pf", + [ilog2(VM_MAYBE_GUARD)] =3D "gu", [ilog2(VM_LOCKED)] =3D "lo", [ilog2(VM_IO)] =3D "io", [ilog2(VM_SEQ_READ)] =3D "sr", diff --git a/include/linux/mm.h b/include/linux/mm.h index 6e5ca5287e21..2a5516bff75a 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -271,6 +271,8 @@ extern struct rw_semaphore nommu_region_sem; extern unsigned int kobjsize(const void *objp); #endif =20 +#define VM_MAYBE_GUARD_BIT 11 + /* * vm_flags in vm_area_struct, see mm_types.h. * When changing, update also include/trace/events/mmflags.h @@ -296,6 +298,7 @@ extern unsigned int kobjsize(const void *objp); #define VM_UFFD_MISSING 0 #endif /* CONFIG_MMU */ #define VM_PFNMAP 0x00000400 /* Page-ranges managed without "struct page",= just pure PFN */ +#define VM_MAYBE_GUARD BIT(VM_MAYBE_GUARD_BIT) /* The VMA maybe contains g= uard regions. */ #define VM_UFFD_WP 0x00001000 /* wrprotect pages tracking */ =20 #define VM_LOCKED 0x00002000 diff --git a/include/trace/events/mmflags.h b/include/trace/events/mmflags.h index aa441f593e9a..a6e5a44c9b42 100644 --- a/include/trace/events/mmflags.h +++ b/include/trace/events/mmflags.h @@ -213,6 +213,7 @@ IF_HAVE_PG_ARCH_3(arch_3) {VM_UFFD_MISSING, "uffd_missing" }, \ IF_HAVE_UFFD_MINOR(VM_UFFD_MINOR, "uffd_minor" ) \ {VM_PFNMAP, "pfnmap" }, \ + {VM_MAYBE_GUARD, "maybe_guard" }, \ {VM_UFFD_WP, "uffd_wp" }, \ {VM_LOCKED, "locked" }, \ {VM_IO, "io" }, \ diff --git a/mm/memory.c b/mm/memory.c index 046579a6ec2f..334732ab6733 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -1480,6 +1480,10 @@ vma_needs_copy(struct vm_area_struct *dst_vma, struc= t vm_area_struct *src_vma) if (src_vma->anon_vma) return true; =20 + /* Guard regions have momdified page tables that require copying. */ + if (src_vma->vm_flags & VM_MAYBE_GUARD) + return true; + /* * Don't copy ptes where a page fault will fill them correctly. Fork * becomes much lighter when there are big shared or private readonly diff --git a/tools/testing/vma/vma_internal.h b/tools/testing/vma/vma_inter= nal.h index c68d382dac81..ddf58a5e1add 100644 --- a/tools/testing/vma/vma_internal.h +++ b/tools/testing/vma/vma_internal.h @@ -46,6 +46,8 @@ extern unsigned long dac_mmap_min_addr; =20 #define MMF_HAS_MDWE 28 =20 +#define VM_MAYBE_GUARD_BIT 11 + #define VM_NONE 0x00000000 #define VM_READ 0x00000001 #define VM_WRITE 0x00000002 @@ -56,6 +58,7 @@ extern unsigned long dac_mmap_min_addr; #define VM_MAYEXEC 0x00000040 #define VM_GROWSDOWN 0x00000100 #define VM_PFNMAP 0x00000400 +#define VM_MAYBE_GUARD BIT(VM_MAYBE_GUARD_BIT) /* The VMA maybe contains g= uard regions. */ #define VM_LOCKED 0x00002000 #define VM_IO 0x00004000 #define VM_SEQ_READ 0x00008000 /* App will access data sequentially */ --=20 2.51.0 From nobody Fri Dec 19 15:46:32 2025 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A3C071FDA89; Thu, 6 Nov 2025 10:46:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762426013; cv=fail; b=CsC4LUpdxiGc9iEAPRGANqVZD3TFR7FHTHEcv/1Fa1WU6jQH4nOTv/MFBJh/2e57XWjaMFcrRs60FGLbuzP2tIRvnqhHQ+FoaN7MP/fp2YwjIPtonWUEYowGgq7FZmrLnfOoK8QX9txcxv7BBZYTqCxLZ6JIU6mVdvzlWr9DRrQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762426013; c=relaxed/simple; bh=yJRiJjIVJX5ugUMb+rbFn9Nqj3Oe7zSUgTia9epSWI4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=bBbZ1BQ1FJ6q8fBcQG0f1Mp1BcAuiMVHdDpsG53knZbkGA1aimc7zIgpSBVa2sZPwRXyzu6pooEHFieNq7Re9wLVSk/u2PSJkGzwXmpt/UiSjY6yNXQRVMqqiowyUrgy/RS4+xXB0HNm3iLRjbwczIBxjonq0yKHeoT4b4+BaUc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=jQ+RTIvn; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=DVA4iR+/; arc=fail smtp.client-ip=205.220.165.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="jQ+RTIvn"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="DVA4iR+/" Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5A61CUM0000531; Thu, 6 Nov 2025 10:46:30 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=mao3WdHLkdfH8B1+duzuaq5WP4IuopouXpNoA8xuH/E=; b= jQ+RTIvnhuJ+pNhWNVSgChVyRtiQ+VfBARCKhhq19P/2iAyfDDd2fZsL7noJxLdl I5ttof6VGfApI3Xagg+9Ko4crEhBwIPNLyHEWbOVGrvqlmevpLtIdMRHpYieB+El L/B1roFdRyt/F/oQq1avyH8eH7mQ1Dj4uqpyqAwrnGjsWBaz+WgGcEr2siFqMgCq jLKnlFsxVzFeb5im8+oMPJEtMNscIrtWIV9618loXgcUmCuLU3pwIRc8lVgOMhMh O734q53+k7hfjhFl/26aTzLrBz3hzG+N8Vv7fbicsOPJ1kw89wHf56NoBMMhDd0S D8IZfCe/fBo5DgPIUKiGuA== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4a8at91qq5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 06 Nov 2025 10:46:29 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5A69lLEK010770; Thu, 6 Nov 2025 10:46:29 GMT Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11010020.outbound.protection.outlook.com [40.93.198.20]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4a58nc8c3s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 06 Nov 2025 10:46:29 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UyrSC5hY0yWsHedgaIymlI7tl3hfhUFYaMjyujxzJJsDtyBDz51zFVkWh8FonWbvOLjzRPtLOQN/JCeDz+ivOqMZeVUn5JY7RA+/eAfoFqezO72iOZrbZEw5PtML+PTMwOVruwh/pcM7qNb1r+enB2HaHlzAgV3IfkDX64t3gNsj1LyZJZ1XlEzhZSQ6KFUOVMWnXoico22DVbiqLP3DJSE4lOBsrWEhwiIcjrp9Wa++4s54DCK9R0nm/gfsXazbgUZQDunPruxhb3qzJoSKoNk0E0sLanW4XSpBcIuui8Y4AJpuKQpYyXPhM1OHBHyTWKjH7Abn+XtxJDSzitn22w== 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=mao3WdHLkdfH8B1+duzuaq5WP4IuopouXpNoA8xuH/E=; b=BlR5JeAFstBZSO5XsGmqL0jn2w+i2f3lnfqlEx9y71rpOOATSQNDfM/GfQplFrQislt/SJ1Q6xj1WQmvlXl6O6Rsy3smaKTGDuoSN3uO1IeH5J1dt0RbYnKqASxHQSlIDnFHo7qclNaw9HOWvvR5ho9u4g9jRrbkybhcntQmDQhoew6nGu46gAGVK/dOR9kUYY5VcllpYyCHk8OEFzR/SbBZkA3BPuFK5A6GnTNwk4YLwt63I0iTSdej9UxCtrMKFocy+noAwgSoKpVH6z7YY/UiyOx22kwBf4ywCd3PKgEZ3w9iXmAEcFonfthMctgd0l7BlpE9SaRZiJ3wPbsnCg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mao3WdHLkdfH8B1+duzuaq5WP4IuopouXpNoA8xuH/E=; b=DVA4iR+/rqj1hNfQB/xxM4yq4S/UGQJ1spwE+CUIcnSjhPiE+l/s7zQQlaCwTsRDFyRtjHWiKhyJWE0on0IF2BaGdS71N8Rz5VQ9lw+akNT+ICNDFHxpiM5K68SpcuPXyR7ZYDH/uIwvXXcwUav9Z3pPvkb/xhWUapmAeb88BTc= Received: from DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) by IA3PR10MB8250.namprd10.prod.outlook.com (2603:10b6:208:573::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.7; Thu, 6 Nov 2025 10:46:26 +0000 Received: from DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2]) by DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2%6]) with mapi id 15.20.9275.015; Thu, 6 Nov 2025 10:46:26 +0000 From: Lorenzo Stoakes To: Andrew Morton Cc: Jonathan Corbet , David Hildenbrand , "Liam R . Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Steven Rostedt , Masami Hiramatsu , Mathieu Desnoyers , Jann Horn , Pedro Falcato , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Andrei Vagin Subject: [PATCH v2 2/5] mm: add atomic VMA flags, use VM_MAYBE_GUARD as such Date: Thu, 6 Nov 2025 10:46:13 +0000 Message-ID: <94935cf140e3279c234b39e0d976c4718c547c73.1762422915.git.lorenzo.stoakes@oracle.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0683.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:351::13) To DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB8218:EE_|IA3PR10MB8250:EE_ X-MS-Office365-Filtering-Correlation-Id: 239e2db9-af1d-458d-7c87-08de1d21bc2c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?dA/9UJ4cxODJBMLA/yhYNx2iRfEKbcoyui6v1mO9oCboQGk2lQottiO5FNZf?= =?us-ascii?Q?hBWiE/elfjFCWgF73pXLRdizALvoGy4oAmDVRHOc+nvIa/VfuU3KZWp0bD4g?= =?us-ascii?Q?T4b9OWOfFz7PRJNX4wSRLrNmuWlFzMqhv+jy/bCYIfYCtlWVvyI1idifKt+Y?= =?us-ascii?Q?EvSEDsGW8zB0kDyzHBkhpuHKEJ9C7LwNxZzLC54Hv9wurP0GwKjlWhSO2MWX?= =?us-ascii?Q?GyO5W1LKc8PCUxLBVUsSZ/6bJawli+tgCefGgP1a0OEII/xrndV8OI1KgLyf?= =?us-ascii?Q?zJuAgkZM6POif+Byd2TrOryatR0vipcI+fBfpmMBoO0wHmjo+qelhDSm822j?= =?us-ascii?Q?Aaaq+v+xBcqpHOe7GUPBffbwbRPsNsRp1toVFx/0S33ceCiXog9BfktyjF7q?= =?us-ascii?Q?hf+82f828kgKL0LCMeK8w/yEgtcxldEXd/mByheFgOReA5Wk9lm0eKQUARYA?= =?us-ascii?Q?obqIAj1PX4JEb5mCO+jl9SiksHs4Y1ucAopDIZ7vGDMVEKUc9JJt/j1QaGWa?= =?us-ascii?Q?tVkXNzNxEf1h4LRo/ivjpsxncci7jz+o+d4klyEk5TltNN7bZ2k4/PjZyEJ8?= =?us-ascii?Q?EXDWUGl6MYRGbRIlX49SRbfKoCTgf1nRqOImqYL3YiZcZXnIC0GDJilrMDFE?= =?us-ascii?Q?NWisFATS066RmcxGb4CK6UyfFW0hg/2W1kMPJ+4LWT+rElWNXtYbckBVatAk?= =?us-ascii?Q?s+O8/w6ckXUw+3Jn1207SB1vOLwk4cj9jy47iO5MpN401si/mkadbCzsvmfN?= =?us-ascii?Q?8Ov+l1zUBtU241HgxPN/sGgPKdH8jt7FG4bHunvKg5unm7KutGk/c1up0C2u?= =?us-ascii?Q?gmO8eYe4CCQEE7LVzEP0FB/8nuF/PMjprPRC2KSmywhsoVi3ljwnI+uzMiYS?= =?us-ascii?Q?PexQeY83UftXF3PObxPphJi9yhR5ZP40ASlfaX4AEAxD71FPRqKfmhLVjwxT?= =?us-ascii?Q?k+BnU1vwVbUCDTFhtkBdiqlWEjKjKwkQuGCdehgEPPfWfpTRPFWPF6+3DES7?= =?us-ascii?Q?J8IzmcDSmVVrkvg7Eeq4c5rElqJ7qnueSsu+BjLYaNXpiVxzuT4cc3xhd8HK?= =?us-ascii?Q?ZyrPQH9HJfraK3GPqZ1h7jHuhPk06NEfUDiD53U40k4yqvFuD5gPOLz/VmbH?= =?us-ascii?Q?Mkp/igbIz3oAalwg5hbRUUvRa5eCYTYWQ3Q/TwJyWh9Se7EDloeeLh43VA18?= =?us-ascii?Q?W6RAEmNmBaPDkFJN/Nhw63k9oAZFF7Yd8tO7VBIp9oIQJq6IJ0pVBYZKBLqi?= =?us-ascii?Q?moNHxSS/cjPxZkzoDDSdmS5GBIBFnYzeDCUJbBk5DoyqpzKlomyaqm/WqB3U?= =?us-ascii?Q?9HmZ5uDjrcc1Z1TJ1/DLfqx99zLD91phgPKaOfCM8pAlkB4Vfct+GMXRLeLn?= =?us-ascii?Q?HHox93ByNJVcWggX/BaxkyEU3uf1qF+r87qFaVacnHp7TeHU7WMneOJ+6CmF?= =?us-ascii?Q?QbAIC2lMCAMekjvlbNfMmDu7xXqQEpWq?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB8218.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?aqA8FZY7EEImTIdxtADftp4QfRbcR4SWfRNdzZSkJAIQ1lOw49ZMKZr1vJfG?= =?us-ascii?Q?91R32M+/hc5i0xPXXSWq9DtXoQeKhTTdbDhZtRiOj1t+fUf/0EPZTRx791Z7?= =?us-ascii?Q?xBI9S9iyJGK5U1pQ9e4n3kYAqYZfudUt4bpj+QG97+V3PSXP3dUSOVYOtp0C?= =?us-ascii?Q?fXMwthKuzp4+H+gRLkHJWEnRe5GkroEZy9TCfxWkTpvSl/boscUsMMOIodLb?= =?us-ascii?Q?qDePg02uocxW5S/E6a6wrh4Ul/MjgkWEHrsBpBaeWF9YdJIvJX29vaqfLJEB?= =?us-ascii?Q?eaGIp9YMAZ1eMCpdth3Eo6SrrNcTjzerV/ncDW2K2p5YS2n0ZK2op5D6Av7J?= =?us-ascii?Q?WSrd0m2OxDb8Y/uCXVsVMZTG0yzxYF/CsopYJMY63fCNWixb7IvI4BBGjtRm?= =?us-ascii?Q?MAG0wuXPQ3Wsy4UnPjk0Knbyw1+amSukJm0RFdeinz8paCZdk7qKMb+qalle?= =?us-ascii?Q?MQ4gTiaOzhH+QB19HJ2Ru9TqaJvGUxVcrP4iPGKWd4xnMk3ntBR/G5dK2hi/?= =?us-ascii?Q?kpC9k4m6psUWEQPQjRzWsKEfVMBsFjPTZvvqtgxROYZ09bl7ix0nGtoJfq7k?= =?us-ascii?Q?h3sv3FUnKIk04hWqZMTnqTGHKyHFnBG8AjWfQYTZ1c8gPIcGUwwhpe050ZoO?= =?us-ascii?Q?xtPFIhEgjnTJFkHv6LCD1MyqoeqOL7vRTPvJrD9OA7t+J5MicFLQsX5FRN6N?= =?us-ascii?Q?Jq590ssyvbaMgR/OmP1SmZLo9cNV6GCMNCKngSjyRxISzPgx4izgAvjmoahs?= =?us-ascii?Q?sln5iG0Kp2TEx+F7fbiYtpsPkjp4UddTynyX9Jxb7BfABQViU0/fMU+ZGQSY?= =?us-ascii?Q?lWmtAZI0D5H/0puZiS+o7M9B5t8DfQ1Mwb0rgAKkPA8Q5jvYQlqJ1nffMeDb?= =?us-ascii?Q?T/ZoOVNNjEm6sfksLXOApu7F2iQhQoxBbwhxDFvWc7Q79APXfPH//VMdx0vd?= =?us-ascii?Q?1Bu93TtgWaBSyNPiN4t60Oa1mOm5ZWAE4rMfdZUHILmI1/r0Fj+VxViytJp/?= =?us-ascii?Q?yiglL77yXHuvuA8ojnSMzBgPMnYfeQlkHiSIGobADesnw2PSc5Jy8VOhJ6/X?= =?us-ascii?Q?i3UNePn+Hlo+BRbmdhbXBlJCaRB9eoV65HdCf+6nAdtv18Lg5M9Z1o/iSNHg?= =?us-ascii?Q?oGLpudKogA6aCLFSuSBJrNiy6fgxmHmbRmzoJOiqMiMVuUfmbdIBl8O4SjNE?= =?us-ascii?Q?axj/Z4TAc8xIWErmxyotBHsqL5bJiO+y+wg1W9QYFWMYCDWhvqutGwddt1xB?= =?us-ascii?Q?h517So1IJiVsW3GZFTjNyDwP3L/sJ8XfxEx+4ovdOBWrCReM6VVgcdMKg9Kb?= =?us-ascii?Q?aYl0+a9iNA5g4ks9M1yhYkJaqEoHsX9+rmtaRQzAa3p1SK+oiRGSNNwYwks/?= =?us-ascii?Q?tivoLS9ZNAYoNg+JXaCpXs8Unn8Ipssxfla5Z/QHhmtP4uON4Nzdc3gAAub0?= =?us-ascii?Q?7/3CuUC3CB09PZCyLF8sOusT8qGngihc/lag5NtwDYDZt/vrNWAw83Un8HZ0?= =?us-ascii?Q?RioXF3cPZrFrydVNlJSa3SmvvVNuihlvUMDl4ZAQ19OpG0VBHnRbmRAiJReE?= =?us-ascii?Q?d+J9z4d9s+hBQnX9DhzGhN7on0ZoXxJIyShoKN9baovKtSbro+w9PRAaSXxC?= =?us-ascii?Q?HQ=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 1XXBaVDzNWeYoJVV94qDzObpX5PObmMce6Vj/AvgO8TquzChDVZAnTiNCOb0xyjHk5coHNqYMIc0nWvTbmDMualrdXp7jBBYN+NzaNuXHk+5rHtxr4CrzokRys3LJcQlnMRonGhUktEc+jTlpfeo3WcXuOycXSZsbVOYzgPSmuvvRDZTEnoFhgxx6vJu15sJ6548WLPiym87un53ZpJ4pu9seu1b8tX17k+xgIf/Y/0STJida+XJmDnCHpWM96DzsHbzwOIjgfKMCE+m5HWP3ZKN8YMJIlE0IQceNe+pREQ6uLWQCYJlqPPj2DVmVTs/Jm9i6X9fS3E1eCmJn1OO3yRFXSS0doqUlBaZwYLhgOBEOO4QHEDZHLRyAa4ArZEoHKGVNWRX+y/FBofDxxew4tJojyv3FAFYDOf+V98tAhuVAUDQnoCVaB9Qy90OQjG+Kb++WZ+pD2EfCn9CZMVqmQ6gh/Uw1b+C3qfP5x342OaG8VSPTWyoxWR+EswL0oFSwXpYvEIvRf+ZpexSg6pSlBwS37XWpsCRfPrOEBNDP48jWDX7h+zWW48SsQlj7eO3Vo9WWA6RIaTqvH8YilurimfI9VvK4c2AqLrh6iDBV4E= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 239e2db9-af1d-458d-7c87-08de1d21bc2c X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB8218.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 10:46:26.1949 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: QgtsbZN9qNPXv6n5rFoKqGHe7zbP5CZ1yBWOWAaiQ2zstJiW/p+bPJh9d59gfjIDAZ1AzK7FAd1CHhm44irPw0gJBbEnumAt/vo9zb7z9nc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA3PR10MB8250 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-11-06_02,2025-11-06_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 bulkscore=0 malwarescore=0 spamscore=0 suspectscore=0 mlxscore=0 adultscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2510240000 definitions=main-2511060084 X-Authority-Analysis: v=2.4 cv=HPPO14tv c=1 sm=1 tr=0 ts=690c7c86 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=6UeiqGixMTsA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=EQ2y6AcogoNLRGTXdlIA:9 a=cPQSjfK2_nFv0Q5t_7PE:22 X-Proofpoint-GUID: 7Gg5ktPcwtAJnTGhg2r8_oKIssax0QAK X-Proofpoint-ORIG-GUID: 7Gg5ktPcwtAJnTGhg2r8_oKIssax0QAK X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTA1MDEzNCBTYWx0ZWRfXxG3Q4CdGYPar GLBYxbpAUV8iWCdeH4fGj3u0j2ZmO6P7IqUg+F8SsYzObED6jcOWkPJ6Y3Fl1gPmqwUIiIn49xg Z/kDLZmq14t34B65t+L6IE/HcyJm2mUiHtts2SP7UNoZ9apEIEcoujisukN85nHSL7lKz4v8cJI NY/a2tDNGje0GmbIEbz0DDHcX76WWqAEriswD3Y7+/AveQT9IVnAty87usonedIUTCvr/NE+cwv a4VZ1Wdv7DzbAXnrYvBfgfTI+CYM+LWeRIaX9Uz7l64TVsyXhW4QMHIYmUquwebtEAq3kssLUKg HILPVbDUzes/Jmgxeu90oBnz2OtCuep5zCM3P1eUrvI7EWGJCW2t4NFBonnYZlMvovVoEpqrW3G jPlLrPvd8vaXu31pILn20HaFO8od7Q== Content-Type: text/plain; charset="utf-8" This patch adds the ability to atomically set VMA flags with only the mmap read/VMA read lock held. As this could be hugely problematic for VMA flags in general given that all other accesses are non-atomic and serialised by the mmap/VMA locks, we implement this with a strict allow-list - that is, only designated flags are allowed to do this. We make VM_MAYBE_GUARD one of these flags, and then set it under the mmap read flag upon guard region installation. The places where this flag is used currently and matter are: * VMA merge - performed under mmap/VMA write lock, therefore excluding racing writes. * /proc/$pid/smaps - can race the write, however this isn't meaningful as the flag write is performed at the point of the guard region being established, and thus an smaps reader can't reasonably expect to avoid races. Due to atomicity, a reader will observe either the flag being set or not. Therefore consistency will be maintained. In all other cases the flag being set is irrelevant and atomicity guarantees other flags will be read correctly. We additionally update madvise_guard_install() to ensure that anon_vma_prepare() is set for anonymous VMAs to maintain consistency with the assumption that any anonymous VMA with page tables will have an anon_vma set, and any with an anon_vma unset will not have page tables established. Signed-off-by: Lorenzo Stoakes Reviewed-by: Pedro Falcato Reviewed-by: Vlastimil Babka --- include/linux/mm.h | 23 +++++++++++++++++++++++ mm/madvise.c | 22 ++++++++++++++-------- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 2a5516bff75a..2ea65c646212 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -518,6 +518,9 @@ extern unsigned int kobjsize(const void *objp); /* This mask represents all the VMA flag bits used by mlock */ #define VM_LOCKED_MASK (VM_LOCKED | VM_LOCKONFAULT) =20 +/* These flags can be updated atomically via VMA/mmap read lock. */ +#define VM_ATOMIC_SET_ALLOWED VM_MAYBE_GUARD + /* Arch-specific flags to clear when updating VM flags on protection chang= e */ #ifndef VM_ARCH_CLEAR # define VM_ARCH_CLEAR VM_NONE @@ -860,6 +863,26 @@ static inline void vm_flags_mod(struct vm_area_struct = *vma, __vm_flags_mod(vma, set, clear); } =20 +/* + * Set VMA flag atomically. Requires only VMA/mmap read lock. Only specific + * valid flags are allowed to do this. + */ +static inline void vma_flag_set_atomic(struct vm_area_struct *vma, + int bit) +{ + const vm_flags_t mask =3D BIT(bit); + + /* mmap read lock/VMA read lock must be held. */ + if (!rwsem_is_locked(&vma->vm_mm->mmap_lock)) + vma_assert_locked(vma); + + /* Only specific flags are permitted */ + if (WARN_ON_ONCE(!(mask & VM_ATOMIC_SET_ALLOWED))) + return; + + set_bit(bit, &vma->__vm_flags); +} + static inline void vma_set_anonymous(struct vm_area_struct *vma) { vma->vm_ops =3D NULL; diff --git a/mm/madvise.c b/mm/madvise.c index 67bdfcb315b3..de918b107cfc 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -1139,15 +1139,21 @@ static long madvise_guard_install(struct madvise_be= havior *madv_behavior) return -EINVAL; =20 /* - * If we install guard markers, then the range is no longer - * empty from a page table perspective and therefore it's - * appropriate to have an anon_vma. - * - * This ensures that on fork, we copy page tables correctly. + * Set atomically under read lock. All pertinent readers will need to + * acquire an mmap/VMA write lock to read it. All remaining readers may + * or may not see the flag set, but we don't care. + */ + vma_flag_set_atomic(vma, VM_MAYBE_GUARD_BIT); + + /* + * If anonymous and we are establishing page tables the VMA ought to + * have an anon_vma associated with it. */ - err =3D anon_vma_prepare(vma); - if (err) - return err; + if (vma_is_anonymous(vma)) { + err =3D anon_vma_prepare(vma); + if (err) + return err; + } =20 /* * Optimistically try to install the guard marker pages first. If any --=20 2.51.0 From nobody Fri Dec 19 15:46:32 2025 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 385AF2ECD14; Thu, 6 Nov 2025 10:46:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762426013; cv=fail; b=WOy3uE6qyuqfuoWGNilOukxu7LVxxuTAkCRMBpCIlei9ejZpT/LIOvUwB/yFOX3s3sluDFDL1bLSJuFFteohlBVO7uORgCbg7pR1V76b42PGbXUwxToURKGc3jF15CXgGGsSe9Ep4t180bl7EiCRBWNnAVd4hwefo9bRdN+/Fjw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762426013; c=relaxed/simple; bh=MKROvQyiASyYbJJiFXoisAtinMikLeZ2wO/FoIDKnv0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=CCrHlJvbQXPXZAuXU/jkcYzN1tUhXQGaB9NRE9O5WfIpXpv2EQOSV0lQYNEI1xL5S4zUg6dXIdS+3/jelS705YIeNw7VhKC8GZHeYEQ/ehhaGlfkdwU9KiGHnxO8KjU6Naz3iphGqVIypfERm5espIokvlmBB3MPBlAR3NbKoVw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=EVqqSrmP; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=BBWPSc9b; arc=fail smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="EVqqSrmP"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="BBWPSc9b" Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5A61CI9N001576; Thu, 6 Nov 2025 10:46:33 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=l83b7Px4HVVWu/DG54n1uKxc/COK/eWvlZlxxmwskt0=; b= EVqqSrmPTu7yWLmxmEO+PvsM+8lC4DxmcPaA7aK0kBs2tuB1ta9LC2jpPO4V7rN8 eWEhwLypjTM6mv1AiNaj1ls5az6H0mGTinQCf+Q7MN0LNkWXK1kFJIGWh2M4651I P3fILKzDHDDeHnxPoF9whpXTfItz1QiW3bedzVdFgWj01ntDpOT9XUR5vrhWOiFS 1VkBS+s144CN8ESpuATWmEcYQhnU2ecUf1QMa7NrxuE/krclQXJg1cLwlaAWD6/z PxtPShqOfPdjQ7Ml+hWoaY635G4mVnpm2LlUO4PpEM44sdTdNKVMF9jpDo5pyj63 zGkC9JOW7ZEoLhUO2E7pHg== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4a8aqw9qva-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 06 Nov 2025 10:46:33 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5A69pktd010962; Thu, 6 Nov 2025 10:46:32 GMT Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11010000.outbound.protection.outlook.com [40.93.198.0]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4a58nc8c4y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 06 Nov 2025 10:46:32 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Dl6GW+wzf6RHAtchkkb3saO/sxXhhoJ2k9HlH/ufb+N7rwUwuT9u5eFGsXsiBT69TBJRx5kTX249TQowRg+lmvB4cqbWVpBKMT1tMloN0zpkm/SJBOAiXRGyphqOpyT6ZxwTA2TD6MEo3+zclduZ0Ro7ZL/p0fdNdw6vHkf2Y7sqzveOlAOjzca5yNcaKzKNbPeXcB9rrEHZt8dyhimgWcTueROletD02nW6C72G6b+Rn90fJ3sqjE5WgbKzJrGZZVb8ZvgVvKh3Zu9HrF2bv7k2PZv3e6pCwvq6awYlbzQwm5JRK2/J7OLuI2Rv/xyyRkjF9xKUT44sIF6tdOMECQ== 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=l83b7Px4HVVWu/DG54n1uKxc/COK/eWvlZlxxmwskt0=; b=ufoGf0P6ww+5RJPNd/N3iEfMOT8IvsdkN8RUoVOUADdcpGtG18G+Y4CckPYkPaTeIwSrCzR9Z5b5431K/BsYIoB3fmNjWPn5dBhWlGIoiffQduIDXMls+WCgyDyq6kymeOzzOXvgedGAgtib0fUZQypTZ9aEHxBe2axj8NEW+gqVhuuL1kznqTCb5lWo1buErIgi0eNtqwHB4XDZd2MseTHgq6CIj5HwVZitx2fNT7ld+DWN/IhBS7Onp6mOUrfoxqM8ktErdy5kTwsyTyVDEuwSjMnUlrszja8kOVR3E7DpkcxVKcG6TAilHCCiuTC2gEQ5aRHqF3K2lmRD5BOl2Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=l83b7Px4HVVWu/DG54n1uKxc/COK/eWvlZlxxmwskt0=; b=BBWPSc9bmh8J/JChr8T9MZb1+b0zwo06bYsgY4/aGLr2wURHKuolUyOqFj7v1BQ1ue6gyjq0euwYJs/fQA5wK/TuEUf6YvzTil+IsByKACcdlw9G2dzL8BZ9eWFpZmR/wi+KU/GBRswhlQvebPoYt5afgPuOesW5xXyCtcs4AaM= Received: from DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) by IA3PR10MB8250.namprd10.prod.outlook.com (2603:10b6:208:573::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.7; Thu, 6 Nov 2025 10:46:29 +0000 Received: from DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2]) by DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2%6]) with mapi id 15.20.9275.015; Thu, 6 Nov 2025 10:46:29 +0000 From: Lorenzo Stoakes To: Andrew Morton Cc: Jonathan Corbet , David Hildenbrand , "Liam R . Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Steven Rostedt , Masami Hiramatsu , Mathieu Desnoyers , Jann Horn , Pedro Falcato , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Andrei Vagin Subject: [PATCH v2 3/5] mm: implement sticky, copy on fork VMA flags Date: Thu, 6 Nov 2025 10:46:14 +0000 Message-ID: <9c9e9fb6b767556594b2cef023db01d45d8f8463.1762422915.git.lorenzo.stoakes@oracle.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P265CA0275.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:37a::11) To DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB8218:EE_|IA3PR10MB8250:EE_ X-MS-Office365-Filtering-Correlation-Id: 19bed493-c231-470f-c9af-08de1d21bddb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?xYCCo93Zk9p3nynY2dEgud53Kqe/2IkxXXF8WOEChXGjT5MMZDbs9B8RhnY/?= =?us-ascii?Q?MHehZKigMrTk8APm1DSdSGB4xUbAvKd/SKm1ddHYxCFVEZVBI1vEq07Nk88z?= =?us-ascii?Q?M6YU/VWqOSUztRiWCq0006nuUX2kDAhwUjwuFcP8UfQP24q7zLucnHCRcStq?= =?us-ascii?Q?x00xmqr/7ME7s8VsFYVzEnVjA5slW3SbRkbz53T+82AsNc+e+ONeHn732+So?= =?us-ascii?Q?ZK++fSgSq+hEm5BIkdt7gNkMgKRkKKP/SoNUU14vxPwtBSRLb/baOSSMIVk6?= =?us-ascii?Q?6xBfsmWfsejwap3nPl4HLm7KVmlcOC9aHoobJCL76BocI+MZEFJdvcEyYe/U?= =?us-ascii?Q?tK1NyAectIf52vV+bFluBeICfOiUykPajVd8f+h9AfhKQaxSLxC5ocYb8zLK?= =?us-ascii?Q?xV03Ihvt7mnAiLhE/y2toYvGeazhgi1XZDnZQRS0T6y/V7NAvaobFNF81+xc?= =?us-ascii?Q?2qdm4d/IfDBRQgiOIB01u4+6uwawSWReRT4+WQID4Yi0D60y6x/Gf2BaqHW9?= =?us-ascii?Q?hL5NX/L5q20G+ouUQn46zyZYafQQxPX8IAmSfOJ6CVO2hERdM832zt3zul4c?= =?us-ascii?Q?47wEIr1/qWjrloF9IWmwsli2s3vOpQH+x3ZD5R+agBIUM88zFEs0G1lKhaSq?= =?us-ascii?Q?IlM1vbTDz2XT53cOJarCjgknlwF46FH0C/3iL/s5I6qYhxAVHBSf97FCn98v?= =?us-ascii?Q?NqbH0OpVqpALqcynL+iIpzTO8uatOxsMPwST2YlsPxbog/DQGkVqmcVaCYwf?= =?us-ascii?Q?9E5XA4ueF2J20lIV0YJMYbGIMh1mDsVpM+l3Tybru/8RhDkk6Mzk2n+miVUq?= =?us-ascii?Q?TomY7CU/J9jY1IBhOIejaAav1ZoHGD9QDGnSXUAoXfJZtPUh9rxEHIo7eMb/?= =?us-ascii?Q?hauYr/zSNgRVEZMuRftK3tvXphZ+uOckM76lUPay6VF2QdYF4f6SfOI+bclb?= =?us-ascii?Q?Jtal3b2n9lpbkFyGPo+yGr6VcErmMwBUbaBM/YFlnJShrKj7YQNW6jgYg+1R?= =?us-ascii?Q?ULBGHCPC34fr1zCUwER7IVT0P4MvGmEOAqZCGzfpUnQp/tFVPnMvFDV7Wwrt?= =?us-ascii?Q?OiJV2ydh4n9Qe4NXXFB6z/MvjOcwQsLu9BWbUNWQ4osAmuEAfIvaB/5PnE8D?= =?us-ascii?Q?Z5gNWuyN8i49pBn9WOxKB3iEE/iAHQm/+64GwbaCh+p0mmIN7xs1ybE/l/Tq?= =?us-ascii?Q?5Va/7TwfgQV7Nrgox7PqU+9VxwRi0lPSPARJ5rTaNP8pLk0HXI2TO5DW5ON1?= =?us-ascii?Q?xb+9mn8o903BegYtB2ChzU/roDHH3FsVrtqv5fxIsXzGJVAtyK0QDr3p3qC/?= =?us-ascii?Q?wTnWcFb4MV7/iIc6hhNCRmP3Mdi5HtO6dCUsFJa2g+tOYKu69FehATfz73S9?= =?us-ascii?Q?YGcGm5E7UJ62xzd5SuniHgobbVVzSXn8/s6ke1LuJoxnl8i2g/28jcNHQnjJ?= =?us-ascii?Q?N/VpVMUoEY+OONgcFwiY2ebgaUNoAswg?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB8218.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?UO/Zk49BsSRe3mf5ys7lRNkxd23smv58WdaVJy4amPwfUkE838oi8qtng9vO?= =?us-ascii?Q?VQZ/MyN1gub80AY0lfwDK3jZlYuYQaUUQ40MNDmXqIPlwRCRZwImnVqUlOum?= =?us-ascii?Q?qcQnCQZjiOCcMfqYGNZk7LOTwlzyIWW4F+JVeS88A4awxI5NEa4JmvWdss1H?= =?us-ascii?Q?iwjQv6gMYir/5lStz6XWU2VHRMnZLR7W1DlEVpCsdVOg6oZyFBQQD5c3luPW?= =?us-ascii?Q?3SRDIvxhoDyKZYJPvq6FcFFmi59MzTfnGg9OwVPGPr93fppxfvlNIsbWyUCB?= =?us-ascii?Q?mzVzydeNRJtyxZRoNjgR9INazAgcKhzNDF2ImLwKgkH1xrKwlaGejFw7bdxj?= =?us-ascii?Q?g1w4x2f2SppsKxlWJjQNiVk17etDXs0Ks3o4HAKPz2QnHpyRrX74d0UtvOS9?= =?us-ascii?Q?s5l79YYUCYY1pkQmIgvqEa1Ubk1dcbrHq4m8pOP56m5VJCtVuf7fM7Beu5zj?= =?us-ascii?Q?B2tUkhgpVys16wlYCN9LJCV4Kad/lJbEOaldY1mYpYQVJTFTYKQWc0lbj+KB?= =?us-ascii?Q?GRQPGj7FrzOEkkQsOJPcNEPshW/fxNSk0NQLaV+BElJK1VleJGsReBza+vBX?= =?us-ascii?Q?85j2dfklTT5MMsSWNDKAnww7PfOWkI2Xd2Reu5C/4EtA1KcMaXtvGEDulGkQ?= =?us-ascii?Q?6dy4KNoaWHMSvIYJwqEx8fc0deNN5N9aFSl9Ghy/z/QyH/XOpfVvEkW7oSeR?= =?us-ascii?Q?tjbcedyboQNPKKbCXJy6+F1Rsd90JQ9m9mHJYZf1nWOem6OQuEIfHDxakjS/?= =?us-ascii?Q?RoxbvRqggfytMgyulQ/q8ifUBFYs7WTSHikbT1HG9st7nS0C0HDsBUifFLmn?= =?us-ascii?Q?vzsYNBvJqDlLzghF62OAKGzBK9zOhLsECVZ6MF7f2kB5NIQ08o+f9/PcIW99?= =?us-ascii?Q?/3EYpNZt12adYyB2OkmyGYU1Xs5sv7lkVZul+61zZyQk799aa/3AivLAAtVp?= =?us-ascii?Q?BRBZ7HOToTxpaTijtJX483c+j02DKc17MK9e+gOpRPXEojWMhUru6h0d7l+w?= =?us-ascii?Q?drBAMsc5OrQ5baknRxdu6nqQlSWHJGVkBrWZHPirMPyJJgJlky2TMzuURXfP?= =?us-ascii?Q?FCRyHkU8GdBsu4KSqJfMMIHuLKpscsJTbsQJ+7GnuOgebQbn4DjI8vyOZuNm?= =?us-ascii?Q?dZvOqSbnRQo8ZjycieZo3RcSxBQaUrhFnPgifTkpweFRNhVf4fk/zbzZGIYc?= =?us-ascii?Q?MR3PcfmPq/5ytlEBcIL+t5hHmz5QNGZEA8SGx9I6fI8nyGJQMcZ2eji4UWKJ?= =?us-ascii?Q?v5PgxJAAlmVLIpAB889axjWUExmc44WsvSVnPUnhYw5Jq5QOIh7FZBGIH3Fk?= =?us-ascii?Q?LSXacUF/crx4MNw/neAD+lo3q3u6LeTxJWa2HX0gys8KotafnPYkoPF4V2K8?= =?us-ascii?Q?ntvs3qK0+ButCEMxVTnHx3iPK+LeX4cnUWJBP1gIg3xsSnwxOGeKgCO4FAec?= =?us-ascii?Q?Z4iRTOodH32iW6x7ai21C2CW1Ra1zZcJ0bvSPdHYBsLFZTRPEXcnjF0LxdNB?= =?us-ascii?Q?WtSsXHJ2UmItcEXbQhE8fuGWCySCRo/j7WpLJdOUlp5J00Db1dJbujwJCH9w?= =?us-ascii?Q?W2+inTKK0wdQ8LrxhZAEljdxoKk/71uBxgYW7pdnEEPWQ1s9vc9eS69JszIf?= =?us-ascii?Q?RQ=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: ++aOh5L6Y3XNfLPB+X2VRWkiMk+OO+3FArVR7tvjGpLbxkjMJGxDzLRzR1M+1VEBsRGlhuWrRX1OIbLvjjlYNb6pFvN99ea7QjZ2rfTfKABhk5zdsiKiqE4vZW7/PEvqXbXP5O0n9lBGROLesxP1B/6e3ba05y7/sB37WO8g9P3EYZSt+lyVmAoItA6ARBymMwp0HNY957+7s39C0+EoVVxvO1isefWraxEX87UhgLxOg2D4YhvuuAIP60q4O+9m5ETbmaamNRudvXJCul8zgQR7q4DUSL2DI6elCU1KW0Anmv651uOdQQu4rULnGNhwo3AS6UI247xOE3CKaILFz/9LD/GZaPJ80kOlgifLsazEOQ06D4R2Fn+4WAap5ZoGbcMDfN4JESG65/+UOHI320dul822tPdMB1Ir6FmWOCFhvvGsSQtx8C3d33svxmjMt5jvyCS/yHzD180UzvZ8/1eFQqnwhRt4wX27RjWde0/PetVC9P+qgZcEHqJWhe3sax1ZqTPHkAE4UNyY3KVdaLLX0bhW2KK6JqcrofIlFGoP+vgBoA8LKvL/EhphWsNQLgiWu2C6jdwV+mqYHaf4NxQhR3O0P69pxSUzAnOUom4= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 19bed493-c231-470f-c9af-08de1d21bddb X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB8218.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 10:46:29.1143 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 5CZr6yoI/ssM6acxqmqce7m5TmSl2k3TvglKXr4u5I5CA0OpaTLSYKTQxF1dJDirt7urtAlUvhRW4Fdf7iw/vE52twQRKaZQuAo3vO2fx/A= X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA3PR10MB8250 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-11-06_02,2025-11-06_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 bulkscore=0 malwarescore=0 spamscore=0 suspectscore=0 mlxscore=0 adultscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2510240000 definitions=main-2511060084 X-Authority-Analysis: v=2.4 cv=NajrFmD4 c=1 sm=1 tr=0 ts=690c7c89 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=6UeiqGixMTsA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=mMqtBKPntBUHp3g5CqAA:9 a=cPQSjfK2_nFv0Q5t_7PE:22 X-Proofpoint-ORIG-GUID: nQHFjSBWeeQlJQBfv4pqZ1Y3v9dZ0TGr X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTA1MDEzMyBTYWx0ZWRfX+QZ8nhAwQcXg 8dDA21ALoNSsWGx/KWG5iUIrAnGG8fO/3pH4PU1juAAVkiMb7evH8zE5NzhWTVW+AMLA7/uFYsW 3T/BYvU/gJqNEvCPgPnFD43DGb0mjwMkoU1dLWAa86fW1NXUbGDQKz8RHdsPY0ghufVl/AQnB2g 4XXp/zKvyd4HE+5299GZc+1ULl5o6lCuY0sa2C6KXLSwSVcwkwaA3O6eR8U2LwJ5wvbmbfCaHpv uYgeuJVz9JxAN1KNzwk9Llu3YNfYpzHW5cHtfsiL4YWdFxm2fWY0Crg1xmwqnLddUSdrpO48hvD bi7YSpTB3UhLPCjajHD/27lUGQKCDOnrMGeMIiKv5ChSsDZeBadQHV+d10lykPDLmtvWrXunRGc 02uFef06om95IBzL5D+lt/4PaNdptg== X-Proofpoint-GUID: nQHFjSBWeeQlJQBfv4pqZ1Y3v9dZ0TGr Content-Type: text/plain; charset="utf-8" It's useful to be able to force a VMA to be copied on fork outside of the parameters specified by vma_needs_copy(), which otherwise only copies page tables if: * The destination VMA has VM_UFFD_WP set * The mapping is a PFN or mixed map * The mapping is anonymous and forked in (i.e. vma->anon_vma is non-NULL) Setting this flag implies that the page tables mapping the VMA are such that simply re-faulting the VMA will not re-establish them in identical form. We introduce VM_COPY_ON_FORK to clearly identify which flags require this behaviour, which currently is only VM_MAYBE_GUARD. Any VMA flags which require this behaviour are inherently 'sticky', that is, should we merge two VMAs together, this implies that the newly merged VMA maps a range that requires page table copying on fork. In order to implement this we must both introduce the concept of a 'sticky' VMA flag and adjust the VMA merge logic accordingly, and also have VMA merge still successfully succeed should one VMA have the flag set and another not. Note that we update the VMA expand logic to handle new VMA merging, as this function is the one ultimately called by all instances of merging of new VMAs. This patch implements this, establishing VM_STICKY to contain all such flags and VM_IGNORE_MERGE for those flags which should be ignored when comparing adjacent VMA's flags for the purposes of merging. As part of this change we place VM_SOFTDIRTY in VM_IGNORE_MERGE as it already had this behaviour, alongside VM_STICKY as sticky flags by implication must not disallow merge. As a result of this change, VMAs with guard ranges will now not have their merge behaviour impacted by doing so and can be freely merged with other VMAs without VM_MAYBE_GUARD set. We also update the VMA userland tests to account for the changes. Note that VM_MAYBE_GUARD being set atomically remains correct as vma_needs_copy() is invoked with the mmap and VMA write locks held, excluding any race with madvise_guard_install(). Signed-off-by: Lorenzo Stoakes Reviewed-by: Pedro Falcato --- include/linux/mm.h | 32 ++++++++++++++++++++++++++++++++ mm/memory.c | 3 +-- mm/vma.c | 22 ++++++++++++---------- tools/testing/vma/vma_internal.h | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 77 insertions(+), 12 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 2ea65c646212..4d80eaf4ef3b 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -527,6 +527,38 @@ extern unsigned int kobjsize(const void *objp); #endif #define VM_FLAGS_CLEAR (ARCH_VM_PKEY_FLAGS | VM_ARCH_CLEAR) =20 +/* Flags which should result in page tables being copied on fork. */ +#define VM_COPY_ON_FORK VM_MAYBE_GUARD + +/* + * Flags which should be 'sticky' on merge - that is, flags which, when on= e VMA + * possesses it but the other does not, the merged VMA should nonetheless = have + * applied to it: + * + * VM_COPY_ON_FORK - These flags indicates that a VMA maps a range that co= ntains + * metadata which should be unconditionally propagated u= pon + * fork. When merging two VMAs, we encapsulate this rang= e in + * the merged VMA, so the flag should be 'sticky' as a r= esult. + */ +#define VM_STICKY VM_COPY_ON_FORK + +/* + * VMA flags we ignore for the purposes of merge, i.e. one VMA possessing = one + * of these flags and the other not does not preclude a merge. + * + * VM_SOFTDIRTY - Should not prevent from VMA merging, if we match the fla= gs but + * dirty bit -- the caller should mark merged VMA as dirty.= If + * dirty bit won't be excluded from comparison, we increase + * pressure on the memory system forcing the kernel to gene= rate + * new VMAs when old one could be extended instead. + * + * VM_STICKY - If one VMA has flags which most be 'sticky', that is ones + * which should propagate to all VMAs, but the other does n= ot, + * the merge should still proceed with the merge logic appl= ying + * sticky flags to the final VMA. + */ +#define VM_IGNORE_MERGE (VM_SOFTDIRTY | VM_STICKY) + /* * mapping from the currently active vm_flags protection bits (the * low four bits) to a page protection mask.. diff --git a/mm/memory.c b/mm/memory.c index 334732ab6733..7582a88f5332 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -1480,8 +1480,7 @@ vma_needs_copy(struct vm_area_struct *dst_vma, struct= vm_area_struct *src_vma) if (src_vma->anon_vma) return true; =20 - /* Guard regions have momdified page tables that require copying. */ - if (src_vma->vm_flags & VM_MAYBE_GUARD) + if (src_vma->vm_flags & VM_COPY_ON_FORK) return true; =20 /* diff --git a/mm/vma.c b/mm/vma.c index 0c5e391fe2e2..6cb082bc5e29 100644 --- a/mm/vma.c +++ b/mm/vma.c @@ -89,15 +89,7 @@ static inline bool is_mergeable_vma(struct vma_merge_str= uct *vmg, bool merge_nex =20 if (!mpol_equal(vmg->policy, vma_policy(vma))) return false; - /* - * VM_SOFTDIRTY should not prevent from VMA merging, if we - * match the flags but dirty bit -- the caller should mark - * merged VMA as dirty. If dirty bit won't be excluded from - * comparison, we increase pressure on the memory system forcing - * the kernel to generate new VMAs when old one could be - * extended instead. - */ - if ((vma->vm_flags ^ vmg->vm_flags) & ~VM_SOFTDIRTY) + if ((vma->vm_flags ^ vmg->vm_flags) & ~VM_IGNORE_MERGE) return false; if (vma->vm_file !=3D vmg->file) return false; @@ -808,6 +800,7 @@ static bool can_merge_remove_vma(struct vm_area_struct = *vma) static __must_check struct vm_area_struct *vma_merge_existing_range( struct vma_merge_struct *vmg) { + vm_flags_t sticky_flags =3D vmg->vm_flags & VM_STICKY; struct vm_area_struct *middle =3D vmg->middle; struct vm_area_struct *prev =3D vmg->prev; struct vm_area_struct *next; @@ -900,11 +893,13 @@ static __must_check struct vm_area_struct *vma_merge_= existing_range( if (merge_right) { vma_start_write(next); vmg->target =3D next; + sticky_flags |=3D (next->vm_flags & VM_STICKY); } =20 if (merge_left) { vma_start_write(prev); vmg->target =3D prev; + sticky_flags |=3D (prev->vm_flags & VM_STICKY); } =20 if (merge_both) { @@ -974,6 +969,7 @@ static __must_check struct vm_area_struct *vma_merge_ex= isting_range( if (err || commit_merge(vmg)) goto abort; =20 + vm_flags_set(vmg->target, sticky_flags); khugepaged_enter_vma(vmg->target, vmg->vm_flags); vmg->state =3D VMA_MERGE_SUCCESS; return vmg->target; @@ -1124,6 +1120,10 @@ int vma_expand(struct vma_merge_struct *vmg) bool remove_next =3D false; struct vm_area_struct *target =3D vmg->target; struct vm_area_struct *next =3D vmg->next; + vm_flags_t sticky_flags; + + sticky_flags =3D vmg->vm_flags & VM_STICKY; + sticky_flags |=3D target->vm_flags & VM_STICKY; =20 VM_WARN_ON_VMG(!target, vmg); =20 @@ -1133,6 +1133,7 @@ int vma_expand(struct vma_merge_struct *vmg) if (next && (target !=3D next) && (vmg->end =3D=3D next->vm_end)) { int ret; =20 + sticky_flags |=3D next->vm_flags & VM_STICKY; remove_next =3D true; /* This should already have been checked by this point. */ VM_WARN_ON_VMG(!can_merge_remove_vma(next), vmg); @@ -1159,6 +1160,7 @@ int vma_expand(struct vma_merge_struct *vmg) if (commit_merge(vmg)) goto nomem; =20 + vm_flags_set(target, sticky_flags); return 0; =20 nomem: @@ -1902,7 +1904,7 @@ static int anon_vma_compatible(struct vm_area_struct = *a, struct vm_area_struct * return a->vm_end =3D=3D b->vm_start && mpol_equal(vma_policy(a), vma_policy(b)) && a->vm_file =3D=3D b->vm_file && - !((a->vm_flags ^ b->vm_flags) & ~(VM_ACCESS_FLAGS | VM_SOFTDIRTY)) && + !((a->vm_flags ^ b->vm_flags) & ~(VM_ACCESS_FLAGS | VM_IGNORE_MERGE)) && b->vm_pgoff =3D=3D a->vm_pgoff + ((b->vm_start - a->vm_start) >> PAGE_SH= IFT); } =20 diff --git a/tools/testing/vma/vma_internal.h b/tools/testing/vma/vma_inter= nal.h index ddf58a5e1add..984307a64ee9 100644 --- a/tools/testing/vma/vma_internal.h +++ b/tools/testing/vma/vma_internal.h @@ -119,6 +119,38 @@ extern unsigned long dac_mmap_min_addr; #define VM_SEALED VM_NONE #endif =20 +/* Flags which should result in page tables being copied on fork. */ +#define VM_COPY_ON_FORK VM_MAYBE_GUARD + +/* + * Flags which should be 'sticky' on merge - that is, flags which, when on= e VMA + * possesses it but the other does not, the merged VMA should nonetheless = have + * applied to it: + * + * VM_COPY_ON_FORK - These flags indicates that a VMA maps a range that co= ntains + * metadata which should be unconditionally propagated u= pon + * fork. When merging two VMAs, we encapsulate this rang= e in + * the merged VMA, so the flag should be 'sticky' as a r= esult. + */ +#define VM_STICKY VM_COPY_ON_FORK + +/* + * VMA flags we ignore for the purposes of merge, i.e. one VMA possessing = one + * of these flags and the other not does not preclude a merge. + * + * VM_SOFTDIRTY - Should not prevent from VMA merging, if we match the fla= gs but + * dirty bit -- the caller should mark merged VMA as dirty.= If + * dirty bit won't be excluded from comparison, we increase + * pressure on the memory system forcing the kernel to gene= rate + * new VMAs when old one could be extended instead. + * + * VM_STICKY - If one VMA has flags which must be 'sticky', that is ones + * which should propagate to all VMAs, but the other does n= ot, + * the merge should still proceed with the merge logic appl= ying + * sticky flags to the final VMA. + */ +#define VM_IGNORE_MERGE (VM_SOFTDIRTY | VM_STICKY) + #define FIRST_USER_ADDRESS 0UL #define USER_PGTABLES_CEILING 0UL =20 --=20 2.51.0 From nobody Fri Dec 19 15:46:32 2025 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7B2313090F7; Thu, 6 Nov 2025 10:46:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762426016; cv=fail; b=r55XWlYatJfTI5X7DKrlOjJe7OeC5x37r9or0nC8S10NPt0y0bU+Ug5Itih0G6XmWrlL6zcGxBzTbluPsZvBy4xwdALIoc4ZJIn7RUTjGtJ9gkCvXX8d4BoZ/1WVsvOePSd4VwmqWdpPV1o1WxYVz9VrvwXPbj4djkjsj1MWYzE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762426016; c=relaxed/simple; bh=kOaPbsgk0DyMF5/18TgHzD91U463nM+n8C/nY6UYIUk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=L4wNqANNnhmmsUJkHlMwRhDm5oec2xp7kZ9tX1Cmc7bZXXeLdUWIX3tGo8e3fq7EuFi0jvXlMd4J8iux8i5AG9qMwjh3M2H18M/p/G6Hbdz+Kg88yBLjbFmQRTu5L2KhEqkFg8+0LzFXMJKu1Cql0RFKPGJ/SvwYnctb2LTNwi0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=XMZrivtB; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=LPXjfFfk; arc=fail smtp.client-ip=205.220.165.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="XMZrivtB"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="LPXjfFfk" Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5A61CNFh025060; Thu, 6 Nov 2025 10:46:34 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=fKBjo9f9SW2ZLjUHOSNR47gsbntZ27MhtV2A18HPhGE=; b= XMZrivtBD7qgobAxiEZe1oG8CGe+r2vAeTJWFTxWitALP+vqK9XClPXN1fwVW5xv MeakGlvkqpS8NQC0OapxB+D0NlO82NuKiBOuhVfOwh26m4BaMhinhmpyhpg1usu3 LgnYGIDTMLtHgQVQUl1g08OwNUTmcrmRDS897Oc8AQ9zTc4MTwJOtAgWtTWE4U4z zvwXOonctBXEuMnjnQNspo2/+rwvg+/mcitc1IHLTzu6QTuloWIiH8Da9iOb5DlN eNBZ0TZrZCGYx1EVmWXFrmy58Za0bDErT7z1EDR/3BS+MnFSkb60fhIdjvBh5tzf E/SI/3KsaF70hOESNdbr8w== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4a88aka5d6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 06 Nov 2025 10:46:34 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5A69XvXx014888; Thu, 6 Nov 2025 10:46:34 GMT Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11010029.outbound.protection.outlook.com [40.93.198.29]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4a58nc0evw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 06 Nov 2025 10:46:33 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bc/tlW7wKughwnGBdVXoHrmdXwUTeIeZ4mw5Iy2SZP5JATpH1wq8o476r04G3VG8wFTr0Dci87cUnaauabalIk4Z+obO7TpS2Abhqm6UeVPNhmcvnGIxCko2ZQkuuxrxXjo4+hF1L67hpv1ImlQTM1//PgTU3LPCuqdB0pJueJpxHnEF6iHt1Vqo5M4yxbNWuVD8qCPs+ZBOPsd0joFA6+Y0Si/zOxaFnT8XKzPFM1C58Xqszien/frRJknzV6Rgrmo2syrXAlKL8pNweQFWAQp79cJnBCIKtDKeapgivQ7+Og2YdR9IYNW7SwXuNUAc9oFBzztWMwGqJVmroo8NNA== 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=fKBjo9f9SW2ZLjUHOSNR47gsbntZ27MhtV2A18HPhGE=; b=mQFjHCHADCCSe/iAkTFO0+z7ZslOKFzMzzk0XWVxXx7Cv997NiQ8CF828W9n7GIoj055++yWMhApOeJfjiSjOd3cvlEqBwq7VL7wsTshxNO3omUyjX33PqPSFK0leQZqvhFudjf5PAWlLDj+dtW249C+J8x4LioeNU5x0MUBLFrO8oAQ601TJAbcKASJMbYRxttrekkOfHUmyPtuBc8DXLGk2DzJISJzKlyrtRT4085sN/rqB1yoB0DbHFxrz4UYl3UH2YEyPzaNE21yAoBqKauobTJGsL9o11S0pQJQHvn7ukXb1z/cHefU4Sp1ffrMdmlxM9oNO1krkb0xNLEkqg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fKBjo9f9SW2ZLjUHOSNR47gsbntZ27MhtV2A18HPhGE=; b=LPXjfFfkTDm0VPOeo5BGENkB+222Wm/n0c2HzydbTV79jrQPnN0pc/RkyRq05z+tpKIY44iC2ZZ7kH/SP9yGU7ZFTWG/I3mkDimpphgmuqoIRiHPm/AK5uFlVW1bXtdLhUtPsaRriPBS0PkhpmtJCWQ8sEe6ZZBJ2SkRYBXv6JY= Received: from DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) by IA3PR10MB8250.namprd10.prod.outlook.com (2603:10b6:208:573::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.7; Thu, 6 Nov 2025 10:46:31 +0000 Received: from DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2]) by DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2%6]) with mapi id 15.20.9275.015; Thu, 6 Nov 2025 10:46:31 +0000 From: Lorenzo Stoakes To: Andrew Morton Cc: Jonathan Corbet , David Hildenbrand , "Liam R . Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Steven Rostedt , Masami Hiramatsu , Mathieu Desnoyers , Jann Horn , Pedro Falcato , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Andrei Vagin Subject: [PATCH v2 4/5] tools/testing/vma: add VMA sticky userland tests Date: Thu, 6 Nov 2025 10:46:15 +0000 Message-ID: X-Mailer: git-send-email 2.51.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0272.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:195::7) To DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB8218:EE_|IA3PR10MB8250:EE_ X-MS-Office365-Filtering-Correlation-Id: 9b00eefa-0021-4cee-93d1-08de1d21bf33 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?xmzcJjLo44/Yf3AsXdDlfG1HXKwHOCDZxBQQoez0XS5bASZ+2jyZftEqIwpZ?= =?us-ascii?Q?g1ZVB5zAkQwWAJpgo9psr4W970mz7pVjk4kcjo03uqsLUlnP5d4DQ/qPjexc?= =?us-ascii?Q?7PUvOl2lxSQigs1LkJCtdgVP9AxAnRB30OCyLI7LWlUfIuR0kf8m29saiDzk?= =?us-ascii?Q?mvQAQR6MtnYD/ooSX9T3clGWToESj/VH1wA66xNVRu3PiqP6bMKjFtb5m7IF?= =?us-ascii?Q?VJGfsDP9eUVEPRKHkb/biz3OGXmBZQyW769qt1YAVZ5WyBqCxvIieCwivqOM?= =?us-ascii?Q?mJK2+tJKn2CdcmaBEpm6DYeeE9a643f/RGrNE8DR3Vhu6KEpwEWB8ZrtWrbj?= =?us-ascii?Q?lQNGicxgIO1Hke5q+EnBa23u5HifVuQ1/TKJzXrh7WXAAeLf3VBWoBtC33v/?= =?us-ascii?Q?+fnO3SDjV05csjYxEO4pjjGs77lQzBjg69VTm9bBpC9TKHiKnc2hTmwERk1o?= =?us-ascii?Q?W7FucmyMO5ANGzhZpGM0+ZF/OOCwwqG6CuJo7GY+6vS7HpKddkMo9hL5ntId?= =?us-ascii?Q?yz/k2i401wRPBaHAmL7uu8NmrR1BkgbnsX/Y4p98bCFKcffNY4U5LbuVZ7ns?= =?us-ascii?Q?XveQOwxaey/HYaJxaWsasLMcul+9UvFiAmqEq0NFzG6hnObJNqkmO6bubac6?= =?us-ascii?Q?kZrCJrNoYJj9TYs/9da9h49NzCTga+186t13Vc1MlxkLxp2zcMof7wMgGJU5?= =?us-ascii?Q?LdCQH2E/e6B3pMZ86JIKrKTtqm043lBI2dREMqEQZafTXs0Sed4jolT1fGHF?= =?us-ascii?Q?TiKB8w5AmUJ0NRU/lZ8fGgPTDQhjdObdv4P5EcYhhG32fRR78Vt4DXSZ3Rdd?= =?us-ascii?Q?ALQpODZ6X/oBVB5IsnvLMRlFakjqCafY3AO5NABiXq0AlG4JfkV5homftltJ?= =?us-ascii?Q?V1poLupQL4bsDPUjlVVImf5ADH1JtYRXyTttTu6UIAs8apQaxK8yXYj8nmju?= =?us-ascii?Q?fYCMluZhGYNwoPp5WjbdbtrL0My5i6O6jNlE+zF8QOMvHmu6A0/0aY4UTjYs?= =?us-ascii?Q?JKu9pVVRmUTq+tkxr9HxMB90sePilsO3fr2Fl7zG8N512BJPkhwChIEHGBgu?= =?us-ascii?Q?/RCJc1Ca7pYyudxvsqNKRhEkQEBHVscvxjkaHHjADTxLdcBxbUJu3qHqC2lR?= =?us-ascii?Q?Zo/kD2kljtHFjx1xHNuk4mFp/82hW3FbqD6yv7HIT/+LQBuksy37dFkvED4V?= =?us-ascii?Q?7ZWs5oDsZv4vAQ6qtwrtJwqbTxObjAXhoA9pgSG+Mv6I023m9SRfUp3ODHU3?= =?us-ascii?Q?Zx6ppFPekdbbkvWS5y3l4BHHCmcFFXMw3HWPzhVXNwhh5xrFURcY4WEznlU8?= =?us-ascii?Q?zOm2qJcfzKpIS8i2I0Yx+hB8sX0cyOBeoj58LUNwIVQC0yTl5UfOQutiiAZi?= =?us-ascii?Q?bguyUkCckJGdlE58L53QNvilAmcnss0c4YPoNfvwiZPAzy36ozME8fbnrL2p?= =?us-ascii?Q?wyQ8ViIAVimsBQ8lC2aWXfuNejg+1Uab?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB8218.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?KbAFISjM0l7heMneYk/yo9uljylj2eSmviEwmmxt8k+7Uv61jxUYopUzREEy?= =?us-ascii?Q?LbH6M5BRSDAxv7uJJj91VXVrQd7U0PcdwH08aFpsCMypC2SNeiSIuYc8s0ry?= =?us-ascii?Q?WWMsW9A+QWEYJwB7H/v/yZed4WekZreTEn2pKMztWMtOcGzxSqJaJG6cnLzB?= =?us-ascii?Q?Qsi8Cw82cWuIQCZjQPxAuKi2v9UtR6OuV/q8l+7pHXbl+B1VYZGPteHGIfH/?= =?us-ascii?Q?mJHOFEilkqv73rkuREVsfGgRQl8wpk8ShVd8ztohcBII1mpQwfW9d/lYfwFN?= =?us-ascii?Q?jSwr1z6lZJG9sa0sBEPKmpAaKuADhnjPI7JH+wmqDqWOrOzOHkK4xerov1zr?= =?us-ascii?Q?ieGpZ/UiQMI+/hVCw92nIeTTm1El/uLDNdNQ4klKbJzKt3IAh6IykuycBtmf?= =?us-ascii?Q?djsIoalPoQSoxdJYjbVVDMfgIkf2wIbwnsUyHiLRyVGwvaMlZvFJWcnT0dFm?= =?us-ascii?Q?QZ55+HubIK44QXkfC0oE92VELOfhTh2HGKTnS6vilZKSY5m0+Qgj3lqFYM6w?= =?us-ascii?Q?K5LVRRAmsV0BOU2/a2YviPwWJJSWuaHOQBj56prsruDVjaZVPyfIBGp6RA92?= =?us-ascii?Q?YJTM2o0gzINM9wZ1jwyYON6XlGJTqTRlxw6gSjmHviMJB+ZK8354D0vBReSD?= =?us-ascii?Q?Rwhc7MJ+S7WQskeDAsK3xaUplvsNz+Dl+aQifD7SLV2Xo+1NuCMiI/sImGZG?= =?us-ascii?Q?gi3clpcg2XRRB9mNeaLDSt+1ehtDvPPeN8Z1h5ZeNLJNmZnG85vcTs4+31vB?= =?us-ascii?Q?NKfG/fexjmWZYgpaWuh+i2jE3PPAEgsBLkK3GrgfsFFBfa5tNMXgRZw7zi/s?= =?us-ascii?Q?Ih7c2dJ9TyQPyaej3BTV2JqSTby4IUpm1BHk+jXRRSxWK0ngPRFs7aFmuv6Q?= =?us-ascii?Q?nS6fFCgDkOf/+yz4cC2JgAmPPRoLljCWAwAe6UlIYy3c9QHHzq3AXBTPiaZn?= =?us-ascii?Q?ggCa4dcsa+zSLzRWOC3Ri0xrgAUklTaeVXuTGCtwLXMx9286J6gccYU6k57i?= =?us-ascii?Q?x8Hz5D5e01iEjBSFUvMvRJY5bzAwI50eXXviPB+91bQoGkXtkHjb3HOU2uzX?= =?us-ascii?Q?1+WMByKKz5qOWt+pXFcOFc1YRMMZcgqB8Nj5+kVtZBBd2MWcyZpRtZEqufzh?= =?us-ascii?Q?jKdO0fJIy/5jv+lnbFRzWv8cwt0I2nRgXXoHeicn7MHm3CxtkXujX4Zu6b75?= =?us-ascii?Q?mE06gdPtHmyMscucRW0j0lQkrKp/54EuuEk88/Rsdgh7+I+9XSnLoa6dg+d9?= =?us-ascii?Q?MQwLxnLskJjjzCc3/6xC6qQ52VBwrBnFik3Xsc0ysZR6gBQ2G43TDEVTY1Xb?= =?us-ascii?Q?5PX/oTlDN6iqLBpz+KwfJdNxj0OYYhdgqLQ/zpUSGBHW6gvZdB81ps6GBaD9?= =?us-ascii?Q?6gs2IjvsQatr6guK5XQVI4AiEN0yH+3gjdGYt4x6HdhmgGdpdu9tfunfNx+2?= =?us-ascii?Q?4+LvfrHmZmk8Unb4CU56npaEXDAn2wsdB5F1pYAzhNY5uhYSA++huskNZtW+?= =?us-ascii?Q?H2Mtr0G/MpGj/e7+MM1MHEsCiMBuAhQUU5ZYYLSHnfk3w3Y+Ih1V6ULNGIDB?= =?us-ascii?Q?lRGWF6nkbmilnvH1dpZl2Mf4TnB6I6h2kf31zh9+8XsYQWnfzmXOT9awETWX?= =?us-ascii?Q?gQ=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: RnbBG8ghXx+O4lV/bJ02O/TtrgfxOODRciFXnLVIEFlPPH78Ber7iVQvFKBUTR03CRt1cj4bF6eEJZMuGPOpcu6V/shBmylpjnO35mcCTARyRmHH0wk35gHhMURUXui2XpiMIAaUEYHKLjVUshai/8M4q+OejIk/uXGbp0UnfFFpf5VkPOeHQx5udqVdWrtM6CsAYmEUov+gw54gluh9EyLhJ7ld0CJHnfto+5BiHwoLvD2l1er27tw5llQ6FlxZWtcfTikDwcP3mjtCAOxDDLGHG73VitqMUuMifSW6ALmVplvkPVN/ZDqAMC0YRpLL5OSQartE5OI7HYPof9frVV2oJF0vDIbPTS3OjyUET9WrOw7uCECiso6Q/d46S7Wh2kawy7GluNkV3vs58ykFAiVGrih+9fP884rO/LC8NTXsFSVrBE2MoWgHocHF17VUDGf7FjK+h2FIShqH7Hc/BDMFvyoGtaXoDaa8vsiGVPHqGtpRKekHre+R+Ql2SeUOrgpi40/bmgCHdyO1VJ4/rs+nDFEau4LhK2rcvN6w77zkI2ZhRI1ZnnH3Wu5nWk6zQC9hjm/A6HEVXq3srZJRXZahdaJZ0C1sHu0/M5TDzcg= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9b00eefa-0021-4cee-93d1-08de1d21bf33 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB8218.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 10:46:31.3758 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: m1h8sP0X69t7laMP1TSxaKuMaKuKj7Hdgw9+LmGkqGFDRmDeH8rsnUmYkgb4hNJez2W+sHp7dcMpHN2+KqkaZZvrn5/coOstPHYwADIQDQg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA3PR10MB8250 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-11-06_02,2025-11-06_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 mlxlogscore=999 spamscore=0 adultscore=0 phishscore=0 malwarescore=0 bulkscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2510240000 definitions=main-2511060084 X-Authority-Analysis: v=2.4 cv=LsGfC3dc c=1 sm=1 tr=0 ts=690c7c8a b=1 cx=c_pps a=WeWmnZmh0fydH62SvGsd2A==:117 a=WeWmnZmh0fydH62SvGsd2A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=6UeiqGixMTsA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=p333gLL91CABKhuAUmYA:9 X-Proofpoint-ORIG-GUID: L-h2x9YvZs8wqNRObk8qAg_QNIP6xtbm X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTA1MDEwOSBTYWx0ZWRfX2hwHtMrjJDbj DW44m3XClSCZ/MwMu51Q3j34MSNIkiD35E08ndj5zSEh5JUqro6H3F0P2LrFknyKqXIB3mu8hdL 2/R8CiPtsTQu2S9GGlKrlFtdxU1xReM9ZzIwbWIMgZ49wm2NcjY6TP9TPdQ7FJwvNUix1IJTQzy TzY0SzguFirDY3EOwGpSEplUuUG0hjuKtsuRH8mu7Vn7u7SXzYLRR3on1XgPs6iHUcZPMg/7GnY JJoWmgUMw1N61fXAYUjzpyWabL557NRF7CnzCSKOzfJVT9+WscnXkxHo2ekFDtpk7CCW3RzQJJa czYyOIK4z35W1j6r7T/J1xlwVcReCm/p+sem7BhBSgFkyoir8a1f+p6d78YS+fIJIG741kAx7z1 PM2N95sDpomnZqIOYhhoImVLbfWY1g== X-Proofpoint-GUID: L-h2x9YvZs8wqNRObk8qAg_QNIP6xtbm Content-Type: text/plain; charset="utf-8" Modify existing merge new/existing userland VMA tests to assert that sticky VMA flags behave as expected. We do so by generating every possible permutation of VMAs being manipulated being sticky/not sticky and asserting that VMA flags with this property retain are retained upon merge. Signed-off-by: Lorenzo Stoakes --- tools/testing/vma/vma.c | 89 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 79 insertions(+), 10 deletions(-) diff --git a/tools/testing/vma/vma.c b/tools/testing/vma/vma.c index 656e1c75b711..ee9d3547c421 100644 --- a/tools/testing/vma/vma.c +++ b/tools/testing/vma/vma.c @@ -48,6 +48,8 @@ static struct anon_vma dummy_anon_vma; #define ASSERT_EQ(_val1, _val2) ASSERT_TRUE((_val1) =3D=3D (_val2)) #define ASSERT_NE(_val1, _val2) ASSERT_TRUE((_val1) !=3D (_val2)) =20 +#define IS_SET(_val, _flags) ((_val & _flags) =3D=3D _flags) + static struct task_struct __current; =20 struct task_struct *get_current(void) @@ -441,7 +443,7 @@ static bool test_simple_shrink(void) return true; } =20 -static bool test_merge_new(void) +static bool __test_merge_new(bool is_sticky, bool a_is_sticky, bool b_is_s= ticky, bool c_is_sticky) { vm_flags_t vm_flags =3D VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE; struct mm_struct mm =3D {}; @@ -469,23 +471,32 @@ static bool test_merge_new(void) struct vm_area_struct *vma, *vma_a, *vma_b, *vma_c, *vma_d; bool merged; =20 + if (is_sticky) + vm_flags |=3D VM_STICKY; + /* * 0123456789abc * AA B CC */ vma_a =3D alloc_and_link_vma(&mm, 0, 0x2000, 0, vm_flags); ASSERT_NE(vma_a, NULL); + if (a_is_sticky) + vm_flags_set(vma_a, VM_STICKY); /* We give each VMA a single avc so we can test anon_vma duplication. */ INIT_LIST_HEAD(&vma_a->anon_vma_chain); list_add(&dummy_anon_vma_chain_a.same_vma, &vma_a->anon_vma_chain); =20 vma_b =3D alloc_and_link_vma(&mm, 0x3000, 0x4000, 3, vm_flags); ASSERT_NE(vma_b, NULL); + if (b_is_sticky) + vm_flags_set(vma_b, VM_STICKY); INIT_LIST_HEAD(&vma_b->anon_vma_chain); list_add(&dummy_anon_vma_chain_b.same_vma, &vma_b->anon_vma_chain); =20 vma_c =3D alloc_and_link_vma(&mm, 0xb000, 0xc000, 0xb, vm_flags); ASSERT_NE(vma_c, NULL); + if (c_is_sticky) + vm_flags_set(vma_c, VM_STICKY); INIT_LIST_HEAD(&vma_c->anon_vma_chain); list_add(&dummy_anon_vma_chain_c.same_vma, &vma_c->anon_vma_chain); =20 @@ -520,6 +531,8 @@ static bool test_merge_new(void) ASSERT_EQ(vma->anon_vma, &dummy_anon_vma); ASSERT_TRUE(vma_write_started(vma)); ASSERT_EQ(mm.map_count, 3); + if (is_sticky || a_is_sticky || b_is_sticky) + ASSERT_TRUE(IS_SET(vma->vm_flags, VM_STICKY)); =20 /* * Merge to PREVIOUS VMA. @@ -537,6 +550,8 @@ static bool test_merge_new(void) ASSERT_EQ(vma->anon_vma, &dummy_anon_vma); ASSERT_TRUE(vma_write_started(vma)); ASSERT_EQ(mm.map_count, 3); + if (is_sticky || a_is_sticky) + ASSERT_TRUE(IS_SET(vma->vm_flags, VM_STICKY)); =20 /* * Merge to NEXT VMA. @@ -556,6 +571,8 @@ static bool test_merge_new(void) ASSERT_EQ(vma->anon_vma, &dummy_anon_vma); ASSERT_TRUE(vma_write_started(vma)); ASSERT_EQ(mm.map_count, 3); + if (is_sticky) /* D uses is_sticky. */ + ASSERT_TRUE(IS_SET(vma->vm_flags, VM_STICKY)); =20 /* * Merge BOTH sides. @@ -574,6 +591,8 @@ static bool test_merge_new(void) ASSERT_EQ(vma->anon_vma, &dummy_anon_vma); ASSERT_TRUE(vma_write_started(vma)); ASSERT_EQ(mm.map_count, 2); + if (is_sticky || a_is_sticky) + ASSERT_TRUE(IS_SET(vma->vm_flags, VM_STICKY)); =20 /* * Merge to NEXT VMA. @@ -592,6 +611,8 @@ static bool test_merge_new(void) ASSERT_EQ(vma->anon_vma, &dummy_anon_vma); ASSERT_TRUE(vma_write_started(vma)); ASSERT_EQ(mm.map_count, 2); + if (is_sticky || c_is_sticky) + ASSERT_TRUE(IS_SET(vma->vm_flags, VM_STICKY)); =20 /* * Merge BOTH sides. @@ -609,6 +630,8 @@ static bool test_merge_new(void) ASSERT_EQ(vma->anon_vma, &dummy_anon_vma); ASSERT_TRUE(vma_write_started(vma)); ASSERT_EQ(mm.map_count, 1); + if (is_sticky || a_is_sticky || c_is_sticky) + ASSERT_TRUE(IS_SET(vma->vm_flags, VM_STICKY)); =20 /* * Final state. @@ -637,6 +660,20 @@ static bool test_merge_new(void) return true; } =20 +static bool test_merge_new(void) +{ + int i, j, k, l; + + /* Generate every possible permutation of sticky flags. */ + for (i =3D 0; i < 2; i++) + for (j =3D 0; j < 2; j++) + for (k =3D 0; k < 2; k++) + for (l =3D 0; l < 2; l++) + ASSERT_TRUE(__test_merge_new(i, j, k, l)); + + return true; +} + static bool test_vma_merge_special_flags(void) { vm_flags_t vm_flags =3D VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE; @@ -973,9 +1010,11 @@ static bool test_vma_merge_new_with_close(void) return true; } =20 -static bool test_merge_existing(void) +static bool __test_merge_existing(bool prev_is_sticky, bool middle_is_stic= ky, bool next_is_sticky) { vm_flags_t vm_flags =3D VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE; + vm_flags_t prev_flags =3D vm_flags; + vm_flags_t next_flags =3D vm_flags; struct mm_struct mm =3D {}; VMA_ITERATOR(vmi, &mm, 0); struct vm_area_struct *vma, *vma_prev, *vma_next; @@ -988,6 +1027,13 @@ static bool test_merge_existing(void) }; struct anon_vma_chain avc =3D {}; =20 + if (prev_is_sticky) + prev_flags |=3D VM_STICKY; + if (middle_is_sticky) + vm_flags |=3D VM_STICKY; + if (next_is_sticky) + next_flags |=3D VM_STICKY; + /* * Merge right case - partial span. * @@ -1000,7 +1046,7 @@ static bool test_merge_existing(void) */ vma =3D alloc_and_link_vma(&mm, 0x2000, 0x6000, 2, vm_flags); vma->vm_ops =3D &vm_ops; /* This should have no impact. */ - vma_next =3D alloc_and_link_vma(&mm, 0x6000, 0x9000, 6, vm_flags); + vma_next =3D alloc_and_link_vma(&mm, 0x6000, 0x9000, 6, next_flags); vma_next->vm_ops =3D &vm_ops; /* This should have no impact. */ vmg_set_range_anon_vma(&vmg, 0x3000, 0x6000, 3, vm_flags, &dummy_anon_vma= ); vmg.middle =3D vma; @@ -1018,6 +1064,8 @@ static bool test_merge_existing(void) ASSERT_TRUE(vma_write_started(vma)); ASSERT_TRUE(vma_write_started(vma_next)); ASSERT_EQ(mm.map_count, 2); + if (middle_is_sticky || next_is_sticky) + ASSERT_TRUE(IS_SET(vma_next->vm_flags, VM_STICKY)); =20 /* Clear down and reset. */ ASSERT_EQ(cleanup_mm(&mm, &vmi), 2); @@ -1033,7 +1081,7 @@ static bool test_merge_existing(void) * NNNNNNN */ vma =3D alloc_and_link_vma(&mm, 0x2000, 0x6000, 2, vm_flags); - vma_next =3D alloc_and_link_vma(&mm, 0x6000, 0x9000, 6, vm_flags); + vma_next =3D alloc_and_link_vma(&mm, 0x6000, 0x9000, 6, next_flags); vma_next->vm_ops =3D &vm_ops; /* This should have no impact. */ vmg_set_range_anon_vma(&vmg, 0x2000, 0x6000, 2, vm_flags, &dummy_anon_vma= ); vmg.middle =3D vma; @@ -1046,6 +1094,8 @@ static bool test_merge_existing(void) ASSERT_EQ(vma_next->anon_vma, &dummy_anon_vma); ASSERT_TRUE(vma_write_started(vma_next)); ASSERT_EQ(mm.map_count, 1); + if (middle_is_sticky || next_is_sticky) + ASSERT_TRUE(IS_SET(vma_next->vm_flags, VM_STICKY)); =20 /* Clear down and reset. We should have deleted vma. */ ASSERT_EQ(cleanup_mm(&mm, &vmi), 1); @@ -1060,7 +1110,7 @@ static bool test_merge_existing(void) * 0123456789 * PPPPPPV */ - vma_prev =3D alloc_and_link_vma(&mm, 0, 0x3000, 0, vm_flags); + vma_prev =3D alloc_and_link_vma(&mm, 0, 0x3000, 0, prev_flags); vma_prev->vm_ops =3D &vm_ops; /* This should have no impact. */ vma =3D alloc_and_link_vma(&mm, 0x3000, 0x7000, 3, vm_flags); vma->vm_ops =3D &vm_ops; /* This should have no impact. */ @@ -1080,6 +1130,8 @@ static bool test_merge_existing(void) ASSERT_TRUE(vma_write_started(vma_prev)); ASSERT_TRUE(vma_write_started(vma)); ASSERT_EQ(mm.map_count, 2); + if (prev_is_sticky || middle_is_sticky) + ASSERT_TRUE(IS_SET(vma_prev->vm_flags, VM_STICKY)); =20 /* Clear down and reset. */ ASSERT_EQ(cleanup_mm(&mm, &vmi), 2); @@ -1094,7 +1146,7 @@ static bool test_merge_existing(void) * 0123456789 * PPPPPPP */ - vma_prev =3D alloc_and_link_vma(&mm, 0, 0x3000, 0, vm_flags); + vma_prev =3D alloc_and_link_vma(&mm, 0, 0x3000, 0, prev_flags); vma_prev->vm_ops =3D &vm_ops; /* This should have no impact. */ vma =3D alloc_and_link_vma(&mm, 0x3000, 0x7000, 3, vm_flags); vmg_set_range_anon_vma(&vmg, 0x3000, 0x7000, 3, vm_flags, &dummy_anon_vma= ); @@ -1109,6 +1161,8 @@ static bool test_merge_existing(void) ASSERT_EQ(vma_prev->anon_vma, &dummy_anon_vma); ASSERT_TRUE(vma_write_started(vma_prev)); ASSERT_EQ(mm.map_count, 1); + if (prev_is_sticky || middle_is_sticky) + ASSERT_TRUE(IS_SET(vma_prev->vm_flags, VM_STICKY)); =20 /* Clear down and reset. We should have deleted vma. */ ASSERT_EQ(cleanup_mm(&mm, &vmi), 1); @@ -1123,10 +1177,10 @@ static bool test_merge_existing(void) * 0123456789 * PPPPPPPPPP */ - vma_prev =3D alloc_and_link_vma(&mm, 0, 0x3000, 0, vm_flags); + vma_prev =3D alloc_and_link_vma(&mm, 0, 0x3000, 0, prev_flags); vma_prev->vm_ops =3D &vm_ops; /* This should have no impact. */ vma =3D alloc_and_link_vma(&mm, 0x3000, 0x7000, 3, vm_flags); - vma_next =3D alloc_and_link_vma(&mm, 0x7000, 0x9000, 7, vm_flags); + vma_next =3D alloc_and_link_vma(&mm, 0x7000, 0x9000, 7, next_flags); vmg_set_range_anon_vma(&vmg, 0x3000, 0x7000, 3, vm_flags, &dummy_anon_vma= ); vmg.prev =3D vma_prev; vmg.middle =3D vma; @@ -1139,6 +1193,8 @@ static bool test_merge_existing(void) ASSERT_EQ(vma_prev->anon_vma, &dummy_anon_vma); ASSERT_TRUE(vma_write_started(vma_prev)); ASSERT_EQ(mm.map_count, 1); + if (prev_is_sticky || middle_is_sticky || next_is_sticky) + ASSERT_TRUE(IS_SET(vma_prev->vm_flags, VM_STICKY)); =20 /* Clear down and reset. We should have deleted prev and next. */ ASSERT_EQ(cleanup_mm(&mm, &vmi), 1); @@ -1158,9 +1214,9 @@ static bool test_merge_existing(void) * PPPVVVVVNNN */ =20 - vma_prev =3D alloc_and_link_vma(&mm, 0, 0x3000, 0, vm_flags); + vma_prev =3D alloc_and_link_vma(&mm, 0, 0x3000, 0, prev_flags); vma =3D alloc_and_link_vma(&mm, 0x3000, 0x8000, 3, vm_flags); - vma_next =3D alloc_and_link_vma(&mm, 0x8000, 0xa000, 8, vm_flags); + vma_next =3D alloc_and_link_vma(&mm, 0x8000, 0xa000, 8, next_flags); =20 vmg_set_range(&vmg, 0x4000, 0x5000, 4, vm_flags); vmg.prev =3D vma; @@ -1203,6 +1259,19 @@ static bool test_merge_existing(void) return true; } =20 +static bool test_merge_existing(void) +{ + int i, j, k; + + /* Generate every possible permutation of sticky flags. */ + for (i =3D 0; i < 2; i++) + for (j =3D 0; j < 2; j++) + for (k =3D 0; k < 2; k++) + ASSERT_TRUE(__test_merge_existing(i, j, k)); + + return true; +} + static bool test_anon_vma_non_mergeable(void) { vm_flags_t vm_flags =3D VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE; --=20 2.51.0 From nobody Fri Dec 19 15:46:32 2025 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CBF6030C622; Thu, 6 Nov 2025 10:46:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762426019; cv=fail; b=pB5ospth+IMkKvg+FJ4JU1WRSgC5TXZxuOI6DFYMy5MsRy24NaJeibNAoHrtce1eQ4w6U5vvV+5IuxWQD0UEtAzdu//GTkpcfYLchN3lqST37igf/LBgtk4v4ilhSVD0ez22XdYAbHn2XXjhyvSpTJTJHLsTxmftej2h2i7nsXQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762426019; c=relaxed/simple; bh=bomeT28G7JskK2jERGmwOkLyQUUlx+8UqQNQu6E1ay4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=qEFoJ/sxXZ6plxyhjLFbmuOC6fBGXU25pPbqiFxk3K0SMDnLNhjAfAm+wx1yIPYY2dcKty8D47uzo36xb0moDCtC5ldRWdLxao0zsQnOyU4bRhlYPKTNu+8yDVgQzegMiba6mTYgwjSNDkhfcxTgi2sIUokGyvEc4ZVDD4CcG+w= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=Vh0+VPq0; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=M0crV9sv; arc=fail smtp.client-ip=205.220.165.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="Vh0+VPq0"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="M0crV9sv" Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5A62Ifxh032322; Thu, 6 Nov 2025 10:46:38 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=K6/T38T5zZKTJldzxmf2c5KhA30BP48594uIkLQc4aQ=; b= Vh0+VPq0hJEkDWlm2MP5VIXpMmYArjbIchvtxBcBoXQ1SMNEan8NbOZesX2MfK12 hzvsR8emXbxH+k5Q8gbSEDZvm0kQzD11v2g+DV7qzO2TnbPLTDxIaPDKszTv8xtD p0WgGH/xC9fFs0dIYHbYkS+gJWHeT1tTioGOs28AzRo/+RNC4IFpp7GYFFgd/dnn N8+ZyQj51P0kQbiovFkWoXj127DqduKlAHNX70juBLBfjoGr1lPZhxdwDvzO2qca ebp7NKMgp8kwyryb5gBS80cCalG5WtQjMawWj9pCle0OIZEcuBaj7/tXGFhwUJ44 p3cop991AUkNQYhBZJaZdQ== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4a8at91qq9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 06 Nov 2025 10:46:38 +0000 (GMT) Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5A694eVH035862; Thu, 6 Nov 2025 10:46:36 GMT Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11010044.outbound.protection.outlook.com [40.93.198.44]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4a58np2bcv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 06 Nov 2025 10:46:36 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RFh0ZS76h9JbsHiGWIKqFhq6YL+itIUB/Kx2nLpl36ExPwcMS5WG37MB2LGWEaMGfqMBCGHkIildU9aH1/8FcWqRVMYJYm9j6GH5fkBt7i7eohTQy8AsrunRM40uCaeviZn2ezaM73OOyjFjwqPWnkeOdfU1ADzxakqUZiUGPrm4z42pn3+lLeQzlw0/t7Fa3RmrBa0Qbb9jHfFTzgnEp1B6JdCsujx+ztXbY41g9z+9Uu3JjmgpskYw2spvNPIQXuAfJt+ragFiLCBhkzRNOLOhF1NSBPElAzNcnpQTmfdrZyA+PuSeBKJNo8r5mKA0oeGh5WEfmeagVn0InwVrgg== 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=K6/T38T5zZKTJldzxmf2c5KhA30BP48594uIkLQc4aQ=; b=V4Xidj6c+oBQvlJ8sJ6BY7fL+PMobHErGSYPD/eAlB0MyNugTCtYZ5asgnDyf/NpsTLyLmi9OdygPeFw65PhB88CGm0GQ5XrNQJXSDu2W9yQgIw8e8A5paOe2kCd+5BmnRyPpGk6UWA1Ucd2BxkeROXkmXHvuDr/kEC9wXP1AhDIMeD7zRZHXGGn2cl4OnyTwLlwdj7tJlkkQw+UGhG9eE8NQeXLoa/JfkY8SEtXSYwDdpYCMfI47r+4S+DL3yqATAV+J87XcpdKowmzBIji4vnnV566gB8uKUgscr3K18bqYYENe7uFL5YPezLrPJfnkJ1Usy9AnzSHPg3sEz7slQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=K6/T38T5zZKTJldzxmf2c5KhA30BP48594uIkLQc4aQ=; b=M0crV9sveY8CvghV7pdMBMkCR0d38nPumoMxD7HGJ3BUqUw9zV/CyHDCf7NtFFV60bhFJsZI+sy6YvArDu2pZ61rxBgabQ/at2ThBeZFMqtPLKhGUzOihJB9WimDwX0BJDqv+mpqvi/8vIeLfApVLMojA/Zhc4auiRFN5u9TUeA= Received: from DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) by IA3PR10MB8250.namprd10.prod.outlook.com (2603:10b6:208:573::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.7; Thu, 6 Nov 2025 10:46:33 +0000 Received: from DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2]) by DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2%6]) with mapi id 15.20.9275.015; Thu, 6 Nov 2025 10:46:33 +0000 From: Lorenzo Stoakes To: Andrew Morton Cc: Jonathan Corbet , David Hildenbrand , "Liam R . Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Steven Rostedt , Masami Hiramatsu , Mathieu Desnoyers , Jann Horn , Pedro Falcato , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Andrei Vagin Subject: [PATCH v2 5/5] selftests/mm/guard-regions: add smaps visibility test Date: Thu, 6 Nov 2025 10:46:16 +0000 Message-ID: X-Mailer: git-send-email 2.51.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO2P265CA0184.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:a::28) To DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB8218:EE_|IA3PR10MB8250:EE_ X-MS-Office365-Filtering-Correlation-Id: 2a3fc5d5-5fbd-4c10-952b-08de1d21c0a2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?eeWu8Zu49uNcBwlb37q/QHeBCzjqqUZyiKRYC39u5YeJ8xJESlp31CCEyK7i?= =?us-ascii?Q?W/njQjuGtp5bAfx5PwxwsbrCeuJozWNbG7ybpsGUh9fIL4TC0KgIyXiRzvWB?= =?us-ascii?Q?IumSMuBkjsyVdgxsoyI0YKP+OHvkMjNyVjWbUBDUUTIoJwjGp+QjUq7xzBMn?= =?us-ascii?Q?FWwQMwNBWpfiGx6vvRHzY7i7Y1jstrjhUniwYgDfhu954uNfQ80wDl2sBbea?= =?us-ascii?Q?BdyjXRvlbcCf+1P1hnM9JBkiPAp+xOCScFzwmu+tNHDjnv3AChJAQ2IP7sjY?= =?us-ascii?Q?y7hHH/HuJGvmZZVu0RZr1G9KE+/25dHz7/QoJCa5pJMnaEA5Bhnhv9BOw2/3?= =?us-ascii?Q?MOCjql4qJzMew6vzlJCP+z4XYOCBGa4ZYSL3xH+qj6Jda+oykqQLxKzTj19Y?= =?us-ascii?Q?EgIZQHVbGShe0rDjFq2pOMJc85e6RvwGBihuxdHfd4IYuB73/f1J+LiO1Vj6?= =?us-ascii?Q?EKTzlTCqkG8H8qDoiVNp+WGpdlGA6BFC+yrWBsXhtQGFweIvrjbSSRtZk9QL?= =?us-ascii?Q?LLgXd2SwDIwlhKthBixgQBAosTVN3p/htmbrrQbafsGr1T8cN3WmPKhhrgiZ?= =?us-ascii?Q?PTgF0psnTQ9x/4fzBQp174EGKfFERrG1VqeKBDYvBW+utOgDL4rXVp+0ipIC?= =?us-ascii?Q?UIKRbR4PdAXfx8Tyhp0bagMD1ZNMkJ+CVll02poz+TZOQLZC7YAv+FmVkOUg?= =?us-ascii?Q?hW5paVp0sJCPr7IyB+dLwi2Q+3UW0W56d3eCK63+D9m0DnSCyMkdDs33l6g/?= =?us-ascii?Q?6wd+6Rk5DpWTA7jzot7DLbYFTMjUJE1QPlMtc80aYS7wRtPqq5Y5FdIZ0+sF?= =?us-ascii?Q?X0BKyy9PZgYWoaci4RQ8YZbr0Sh6CdNAOYX8lRtGZC0kL9IaBlJqLbCeBOPa?= =?us-ascii?Q?VlnIN9XQXoF5BjF+xtaC2/KoYLP3TJ4fMIAv0ZAKr/Q0Y52USYbPBZphTjM/?= =?us-ascii?Q?8/BN/6bkWA5IAUYAC3+emZ9XIoOvnp7xeJZ+T+bnXwLL27jPRt0aQrP+E2AD?= =?us-ascii?Q?NUwR6f1WLMwS9K0uFu4vU5dFIyGxnUmgFd2M+RttiIyBK1i78OdQOeAyfNqZ?= =?us-ascii?Q?TbC0wJuvf0MDwQxh42yFPM1zH8fsXFIaYo7Dpnrln01BaHkKHKZFCvZogP4P?= =?us-ascii?Q?8X1MinZ+x7JomdknozOorm8sfy+Hd6ge4wtDRTtv45wHNKO39hFvrpq/CI/8?= =?us-ascii?Q?gNc+grwl9Cx5JbAjmHxmprMMFgIuYG7OxQgUlVosI97gxsfiw88xz9dc2+Q6?= =?us-ascii?Q?TUqCk/TveUvl8/iiJnP914xg5vFq38d8AfF/YWstRToX4vdhvPtZ7LMD/qLR?= =?us-ascii?Q?XxGar5rxC5y/m/Sn//txG5hHui6bbJNx4h53j9YJg1d6zGIkIEqnzlDcy+Bm?= =?us-ascii?Q?H6svqPq1h/npQ/dt1Px9gS5eT9FtXqmvL0llPctvxjoDS+cyPVKFDTVmUIk+?= =?us-ascii?Q?9hIHgY9aGzirkEuaCWVqNnnvQlDT9ALQ?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB8218.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?wweVTeIB8am1GmtZzNLovSqn7xx9XJNAfMk+1FfAec/lgEPaXtMeftAP1EqH?= =?us-ascii?Q?T214cgmdHrNFmIwM60I1cv4PByUduA0vG9AaU2/eR+DV4JOcdJS6G7F3UNvq?= =?us-ascii?Q?x45x8k9HggZHEuSSGrKUrkioHnQL3Ho2JYpHpIBN+yLls8qSDOfOWOq18rKW?= =?us-ascii?Q?mpMxs63SoqusBD0vajmN6o5512hIQ4rKVDEZ7fW2TU2GCj8dVwoUhG/UMHaR?= =?us-ascii?Q?rnzaeKRoDMceHkArc00Gzyaj+RFEMj3gOkUU4tCRM0Jye/5/bhCCJeLPMtPU?= =?us-ascii?Q?/U3bfW9gDzJXRXirtHxlHoKRYepPrODgS2xoxdPcBu8aEv+UCshTL3wQqTtj?= =?us-ascii?Q?zaiE6Ehnvc1FPnhKwxS9qXqBs1GobJng9+uD4KINO2o9kZVNwzfSValxR1DD?= =?us-ascii?Q?jCp1K4K05AEkfn++p4r+10f9y6cd1gHBwzjq3iL8QjkmabykcsDZjLke2i1+?= =?us-ascii?Q?bR2etKVKmOevHltWhYEFogZ9btSLxUx8xEfrv7knS8ztWCgfKq7lTpM+gii0?= =?us-ascii?Q?Fkaupucz9wky+8JJp0dZJdYIGw7VW4vgv2rRBLOoaXQgcrw3nrPSCzcd76vH?= =?us-ascii?Q?/Nfd9Zz+oV9WbrfcfodeK4DC2S3fDDclVVM39c5+NY/1OeJT4pfDzu1KKgdT?= =?us-ascii?Q?UdbswOHLEG0lEgm3CXnNewNgARlHnV9woL8IvkXr0YqtwK+fUOKxXnDfoxxM?= =?us-ascii?Q?Iq+rEPSMXtBCFviuzRDPPhe/DK1jlixDx4urpKhPQUrlkBjAt/XQ7vwdIE6M?= =?us-ascii?Q?88ZQnmkiz/a/QqUPerCTGEDqGZIoDQKfYHh7axcQwC9Kyn7dOtYUoXdFYy41?= =?us-ascii?Q?vHYR00yBAOuwCuOYb1N+x6Dd8nfIqx0ZpDrTfqC9Ex8QleJQfJz74IPlScqM?= =?us-ascii?Q?7Z94K7kWVaYxSLWMOvPCxJdjgK8572nE3cjldKFldJee+uYCXRo0FhqYnBY+?= =?us-ascii?Q?XTKCCySZb66Tt8utDbuPhZSfS22kwPbkwaqU2h9tCvDQMZ1Edg9LYS2A4FKc?= =?us-ascii?Q?35Djw7pwTn63pxaU/k4wmGob2roxncntyAzP4KerENoveW8toq6ZBA2PQANs?= =?us-ascii?Q?SwmZARb3VpdSgteJf3/1yk7Get6MXIn6UHYmooJFBULExv82+BMDHdmaju+N?= =?us-ascii?Q?clxR6brW0DQ0gt0qcy/d825TkSOJX5WSUyI6JywI2JNCsbEhz/pyQuYQwvmx?= =?us-ascii?Q?+D5r32ZVpb510r/9kzobV5J3C5XAterMrustYpwhxLWsb/QIzJxmHIjR8vHK?= =?us-ascii?Q?gNnmRvJ6SnbDtpMkjkZgQaiaweiI0BI4oX/gd6YDq8D0u3xN60zmGkXdtw/w?= =?us-ascii?Q?gXK0XnrPq24bw4BEtLA5vGgAY5mqVzNxUwh4yDm5Fz4R+tLoEWIZObbT3ZJY?= =?us-ascii?Q?9ZbRDkiSq+2A4/PlEOfk7WvVev18p36cneBsH7CPPp9yR8lIZD40Sp14/60A?= =?us-ascii?Q?VZWORXe1Sr0e5ncxYYf/IIv2r71WaqGyVfAVg+YC21nkTwwEcD55sZJdMvnK?= =?us-ascii?Q?4UhdDwfuIClc90eNJOZ6cc4q/L4HW93yKlvLUSd7YsrrSE4q/GD7v23+uJN7?= =?us-ascii?Q?7jtm7jKCwHo6mxNg3Ngp87aCchsRAgw6lrVLhodjLr1Z9mmczTTPOmlaiGnd?= =?us-ascii?Q?VA=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: tUzWNsYc5GxuPdtSyJreM7DeNPLWCuaa48bFZ9Lx4xw8Isw1ynSq/h5I6FePpgAT0GAiB1wX4bV/QL/T27do+xjU37+m4aYgGRqX4UluXPyx/rPVDwD7Kc4/LjQfdBY5ulU9rwjxg/CqD09u1KmMA4scm+qBb7dZDsOvbSfMW9+K0ZaagP78KwPdiY+2WlbK3cSj4yQRWLMR94OlQLo05s7c/aMgmFCO29ykh7pNJUAzzMwATGzn2Z9hUGVy8dXcdTxvU8NeawBa6rfugy+73io4D5pd5GlGyF5ZD/FlGoQ6Jx/jxQ1ZXoh/oDx2MOZ4FNF/19z2i9a4rkHQh/VKtBaNOm/5HZHxyBmhmiZ+vDvcpP2rey17t4f7AQbK/U9ObGTIxnVFfMfzlXeJDI/4pKoXafyFt1wM6e9mYU296cKdeK1zzTsaMbfYKLTSG+3JBBuIvYpuxOeMFTNMu93kFJT4LLajzGkJEtBKaYTsz4o63v6sbd6Ncg523Ahro5cKtAOdZNE7dhe8LZYFHYkcOaagQDTHVvIZlmtCFEcNiNYIrnuHKT1RWwF5rfXpAYYn3ptItRcjhCIdYrjNRRJMk2ghwDgat5tEJY7j4b9XnIE= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2a3fc5d5-5fbd-4c10-952b-08de1d21c0a2 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB8218.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2025 10:46:33.6837 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: NWKzAGb1+wtnxSNm3h8WFR7cKKuUn+KA+QT64fPTn1dEKvsp7MQC7xmuyDq3uo4U+g65XrUlBBcBjKJDNxtvUsFhOSoeaj9DSk7+N7N+te0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA3PR10MB8250 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-11-06_02,2025-11-06_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 spamscore=0 suspectscore=0 mlxscore=0 adultscore=0 phishscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2510240000 definitions=main-2511060084 X-Authority-Analysis: v=2.4 cv=HPPO14tv c=1 sm=1 tr=0 ts=690c7c8e b=1 cx=c_pps a=qoll8+KPOyaMroiJ2sR5sw==:117 a=qoll8+KPOyaMroiJ2sR5sw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=6UeiqGixMTsA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=7oKVWYA_E11v4TV8rOgA:9 cc=ntf awl=host:12124 X-Proofpoint-GUID: Rq1anBKADCsFCm23yctRw0UZkB_JeUz3 X-Proofpoint-ORIG-GUID: Rq1anBKADCsFCm23yctRw0UZkB_JeUz3 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTA1MDEzNCBTYWx0ZWRfX9igYtP42osce s+rx7zHcoyoLnJcGDyGN1a6ph9CCy9a2omGw7b291yZxJ3WhYZtS54+6CTNWiOajawcRqgAjhko PQB7zIT2/APwuV8WY6l1WpgBTQPXAY6H0yZwS5kwcJRYwFtF/J8iWK0k8ZN3HGoc6/YrW5oLRIQ 2rZvcZscXs7etAJAfaHGln6c5u5spcLeuM9Ihv9jOeT12squ2u4A2w/qPhC5D8xB8CVXV+Aykj5 jNe8WEJRsTsNyfan1ILeUjXtJu6Rbx7JRJHH1iNH0EIynZhtjiolkeRNDlicozVfIvZeO0Zv/I4 pV/n+utFmsPGwLHDNNN6CDXwjVbdXEuxUgDOBeWhdYeE0ntmzVY839fWxoWK3ScluaU6wKznzfp t8xBrh7UqGgUZBU+mk9qQPwTVb5MIc8Qmj23pvwTYpt8CEcYjMc= Content-Type: text/plain; charset="utf-8" Assert that we observe guard regions appearing in /proc/$pid/smaps as expected, and when split/merge is performed too (with expected sticky behaviour). Also add handling for file systems which don't sanely handle mmap() VMA merging so we don't incorrectly encounter a test failure in this situation. Signed-off-by: Lorenzo Stoakes --- tools/testing/selftests/mm/guard-regions.c | 120 +++++++++++++++++++++ tools/testing/selftests/mm/vm_util.c | 5 + tools/testing/selftests/mm/vm_util.h | 1 + 3 files changed, 126 insertions(+) diff --git a/tools/testing/selftests/mm/guard-regions.c b/tools/testing/sel= ftests/mm/guard-regions.c index 8dd81c0a4a5a..a9be11e03a6a 100644 --- a/tools/testing/selftests/mm/guard-regions.c +++ b/tools/testing/selftests/mm/guard-regions.c @@ -94,6 +94,7 @@ static void *mmap_(FIXTURE_DATA(guard_regions) * self, case ANON_BACKED: flags |=3D MAP_PRIVATE | MAP_ANON; fd =3D -1; + offset =3D 0; break; case SHMEM_BACKED: case LOCAL_FILE_BACKED: @@ -260,6 +261,54 @@ static bool is_buf_eq(char *buf, size_t size, char chr) return true; } =20 +/* + * Some file systems have issues with merging due to changing merge-sensit= ive + * parameters in the .mmap callback, and prior to .mmap_prepare being + * implemented everywhere this will now result in an unexpected failure to + * merge (e.g. - overlayfs). + * + * Perform a simple test to see if the local file system suffers from this= , if + * it does then we can skip test logic that assumes local file system merg= ing is + * sane. + */ +static bool local_fs_has_sane_mmap(FIXTURE_DATA(guard_regions) * self, + const FIXTURE_VARIANT(guard_regions) * variant) +{ + const unsigned long page_size =3D self->page_size; + char *ptr, *ptr2; + struct procmap_fd procmap; + + if (variant->backing !=3D LOCAL_FILE_BACKED) + return true; + + /* Map 10 pages. */ + ptr =3D mmap_(self, variant, NULL, 10 * page_size, PROT_READ | PROT_WRITE= , 0, 0); + if (ptr =3D=3D MAP_FAILED) + return false; + /* Unmap the middle. */ + munmap(&ptr[5 * page_size], page_size); + + /* Map again. */ + ptr2 =3D mmap_(self, variant, &ptr[5 * page_size], page_size, PROT_READ |= PROT_WRITE, + MAP_FIXED, 5 * page_size); + + if (ptr2 =3D=3D MAP_FAILED) + return false; + + /* Now make sure they all merged. */ + if (open_self_procmap(&procmap) !=3D 0) + return false; + if (!find_vma_procmap(&procmap, ptr)) + return false; + if (procmap.query.vma_start !=3D (unsigned long)ptr) + return false; + if (procmap.query.vma_end !=3D (unsigned long)ptr + 10 * page_size) + return false; + close_procmap(&procmap); + + return true; +} + FIXTURE_SETUP(guard_regions) { self->page_size =3D (unsigned long)sysconf(_SC_PAGESIZE); @@ -2138,4 +2187,75 @@ TEST_F(guard_regions, pagemap_scan) ASSERT_EQ(munmap(ptr, 10 * page_size), 0); } =20 +TEST_F(guard_regions, smaps) +{ + const unsigned long page_size =3D self->page_size; + struct procmap_fd procmap; + char *ptr, *ptr2; + int i; + + /* Map a region. */ + ptr =3D mmap_(self, variant, NULL, 10 * page_size, PROT_READ | PROT_WRITE= , 0, 0); + ASSERT_NE(ptr, MAP_FAILED); + + /* We shouldn't yet see a guard flag. */ + ASSERT_FALSE(check_vmflag_guard(ptr)); + + /* Install a single guard region. */ + ASSERT_EQ(madvise(ptr, page_size, MADV_GUARD_INSTALL), 0); + + /* Now we should see a guard flag. */ + ASSERT_TRUE(check_vmflag_guard(ptr)); + + /* + * Removing the guard region should not change things because we simply + * cannot accurately track whether a given VMA has had all of its guard + * regions removed. + */ + ASSERT_EQ(madvise(ptr, page_size, MADV_GUARD_REMOVE), 0); + ASSERT_TRUE(check_vmflag_guard(ptr)); + + /* Install guard regions throughout. */ + for (i =3D 0; i < 10; i++) { + ASSERT_EQ(madvise(&ptr[i * page_size], page_size, MADV_GUARD_INSTALL), 0= ); + /* We should always see the guard region flag. */ + ASSERT_TRUE(check_vmflag_guard(ptr)); + } + + /* Split into two VMAs. */ + ASSERT_EQ(munmap(&ptr[4 * page_size], page_size), 0); + + /* Both VMAs should have the guard flag set. */ + ASSERT_TRUE(check_vmflag_guard(ptr)); + ASSERT_TRUE(check_vmflag_guard(&ptr[5 * page_size])); + + /* + * If the local file system is unable to merge VMAs due to having + * unusual characteristics, there is no point in asserting merge + * behaviour. + */ + if (!local_fs_has_sane_mmap(self, variant)) { + TH_LOG("local filesystem does not support sane merging skipping merge te= st"); + return; + } + + /* Map a fresh VMA between the two split VMAs. */ + ptr2 =3D mmap_(self, variant, &ptr[4 * page_size], page_size, + PROT_READ | PROT_WRITE, MAP_FIXED, 4 * page_size); + ASSERT_NE(ptr2, MAP_FAILED); + + /* + * Check the procmap to ensure that this VMA merged with the adjacent + * two. The guard region flag is 'sticky' so should not preclude + * merging. + */ + ASSERT_EQ(open_self_procmap(&procmap), 0); + ASSERT_TRUE(find_vma_procmap(&procmap, ptr)); + ASSERT_EQ(procmap.query.vma_start, (unsigned long)ptr); + ASSERT_EQ(procmap.query.vma_end, (unsigned long)ptr + 10 * page_size); + ASSERT_EQ(close_procmap(&procmap), 0); + /* And, of course, this VMA should have the guard flag set. */ + ASSERT_TRUE(check_vmflag_guard(ptr)); +} + TEST_HARNESS_MAIN diff --git a/tools/testing/selftests/mm/vm_util.c b/tools/testing/selftests= /mm/vm_util.c index e33cda301dad..605cb58ea5c3 100644 --- a/tools/testing/selftests/mm/vm_util.c +++ b/tools/testing/selftests/mm/vm_util.c @@ -449,6 +449,11 @@ bool check_vmflag_pfnmap(void *addr) return check_vmflag(addr, "pf"); } =20 +bool check_vmflag_guard(void *addr) +{ + return check_vmflag(addr, "gu"); +} + bool softdirty_supported(void) { char *addr; diff --git a/tools/testing/selftests/mm/vm_util.h b/tools/testing/selftests= /mm/vm_util.h index 26c30fdc0241..a8abdf414d46 100644 --- a/tools/testing/selftests/mm/vm_util.h +++ b/tools/testing/selftests/mm/vm_util.h @@ -98,6 +98,7 @@ int uffd_register_with_ioctls(int uffd, void *addr, uint6= 4_t len, unsigned long get_free_hugepages(void); bool check_vmflag_io(void *addr); bool check_vmflag_pfnmap(void *addr); +bool check_vmflag_guard(void *addr); int open_procmap(pid_t pid, struct procmap_fd *procmap_out); int query_procmap(struct procmap_fd *procmap); bool find_vma_procmap(struct procmap_fd *procmap, void *address); --=20 2.51.0