DMARC-Filter: OpenDMARC Filter v1.4.2 delorie.com 4BHFaXdI023371 Authentication-Results: delorie.com; dmarc=pass (p=none dis=none) header.from=cygwin.com Authentication-Results: delorie.com; spf=pass smtp.mailfrom=cygwin.com DKIM-Filter: OpenDKIM Filter v2.11.0 delorie.com 4BHFaXdI023371 Authentication-Results: delorie.com; dkim=pass (1024-bit key, unprotected) header.d=cygwin.com header.i=@cygwin.com header.a=rsa-sha256 header.s=default header.b=vhnN1aNZ X-Recipient: archive-cygwin AT delorie DOT com DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D95C23858D35 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com; s=default; t=1734449789; bh=jKNm8adQ+R9GFZyVmiEHJ10s4pC6bxEpuur6SR856/E=; h=Date:Subject:To:References:In-Reply-To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=vhnN1aNZMdkoZ22KfmGs9Sv19XzgwozENSdCbAiSTaSH0ymnDUToPaZExNSqJ8qbG ffvH+Dv9yFUYjDZIWOrhAKl1M+Q5nFyTPfMkiesJfW0RJNPx55zEqc4uO1/rAgOksc wTjk6mDsyoHipPy/UKxEQtUvKRN16EI/c5c8Y5Cg= X-Original-To: cygwin AT cygwin DOT com Delivered-To: cygwin AT cygwin DOT com DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E4EF03858D28 ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E4EF03858D28 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1734449668; cv=pass; b=rd0Ph8lPYnyqLP6RajTWujf7SAVxnPKR50TiHG6Pt46F8ayV8pwHfGN3uPnVeEIrsaj39v9KeqKbAwWGpKaRmmOMbh+wQ46EHakms25/7Iir1QO3yepuPEWjJGTY0csTyhdJ27IHCrkslIv9X6spymUfqveXrYvx7sS51F/9jtc= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1734449668; c=relaxed/simple; bh=cQJ3IaryYQyxCD/DjoKVnenYneRJV4PEHLqPXW6M/Wg=; h=DKIM-Signature:Message-ID:Date:Subject:To:From:MIME-Version; b=Fr+abjDpalDZtufYxXw24TW+j1/9Ekp+9jRxfqHszfKzDaRz0vUjdRP2YbQHoKtAYD0GqynOUaPokItuBO1oIqp1VJZtgRtH8PW7MN7xIfxdD927rPmqI9yn9fL0DsFyIUQ7B3c0z2G34fYGmHqJhbGcw7guzDSul2tYNd3dK4U= ARC-Authentication-Results: i=2; server2.sourceware.org ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=N+rprbGOFwcy/o+yNONnj8ByQBy0xo3dqapa/+EWwY3CH7RF45ZMskvoWGctVae4cJdJEotl5u4m2BtUvM0mcWNtc0f46CKSwLlel41c+k8BuUvVyCGY/uyd5JrxEK1CO+5zko+z7v0zRqP4MTmMhwmUecayfmBexqJoSK8JuvBo2+P9MU33M+IIi9r8RccOwz016ErSvC3SnNHzF8YQBS/oeM4/MXUMfFGGbf/Afw6SUvWSs//ZZcNxrQdp8SGpjyFNjhWeYbuIJE3b7n2Qj3jEoGULHIuA2XxdPHQIa1XAXkRvAclEDLMKcEqO2KkDOfaNzcAqBp9bqp7EI9yPWQ== 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=OMaS1/mM7WkbdQI4Q5udbyihBoSfvTwA1AmV21DpoaE=; b=oFQjvVwDEufuGex8ibofn+u27YPTe9WLcsQNrPWA/S2VkyWetqDLmSShkqhzb3MpGEfrChXJ1PsHKRiRX2VyMkFX37vt7msfCA6QfklLqB6DQQvy0ft3ePed560AEZnSQD2dacNuTUga7Of7t7sfV0jOYHpN1oYsfowBB68Te3vIlunBJjjpcSom3Rzz2sBKA5DUkPuT16P/XrYWXUn+0YNx2ZP/+bMBQHCAh2E9gywrhnLQKOspYEHMJeiCtRdg5M/FSzYPKg+yuWz8kZBa0rwhde/PZ5Q2kpu03li++EmK34qJG/e4MLdsqzgjZ5ROEwI1OLg2eAYixBbBQ1d2Jw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=cornell.edu; dmarc=pass action=none header.from=cornell.edu; dkim=pass header.d=cornell.edu; arc=none Message-ID: Date: Tue, 17 Dec 2024 10:34:21 -0500 User-Agent: Mozilla Thunderbird Subject: Re: Atomic mmap replacement To: cygwin AT cygwin DOT com References: <66bf4f86-4618-b9a3-3e33-2c240b9204d0 AT cornell DOT edu> <20180219090042 DOT GC3417 AT calimero DOT vinschen DOT de> Content-Language: en-US In-Reply-To: X-ClientProxiedBy: BN9PR03CA0369.namprd03.prod.outlook.com (2603:10b6:408:f7::14) To BL0PR04MB5140.namprd04.prod.outlook.com (2603:10b6:208:56::10) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR04MB5140:EE_|SJ0PR04MB7774:EE_ X-MS-Office365-Filtering-Correlation-Id: 9f97b712-20d9-4950-a52f-08dd1eb04912 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: =?utf-8?B?VEFnZzJZY211elBxdERLb3RpamR3Z2wzdTFmVW45VFRkeFBpUXZiaFZkTjFZ?= =?utf-8?B?a3oxOE9nZ29PNXFmZlJ1ZTZCSmVWR0JRbXN5WWc1OVMwRUY0K0VwYmtIQlJw?= =?utf-8?B?OU1aZFVBSEhjTDBQcXRrOEh5TmhrQitGTzJ5S2RaRlRETXh6TlIyQnREaFRJ?= =?utf-8?B?UGhCTi9nZDNyVHorWVQ4QWRCbE91SlBaeXZMbEdJSUF5OFQ1bHE1aUNJWVI4?= =?utf-8?B?WGRrL1c0ME13ajBxdlJVRU1mdk8zOXFJOFY0UTZCVkVublkybHFqSXRqVmRo?= =?utf-8?B?eXdVeTJ1L2pYenY3S01nbk5rZ1QranMwcEt4QUM5VnlYdnFMdjR6Z2FaTHRD?= =?utf-8?B?YlNpSnMrTlAybkNqRTlCZVpPMWtpQ05mTlc0N2xPc2hMK2FZMHhBVXp5ekZv?= =?utf-8?B?MkdyM1hHL0hZMkVlcmpIWE14WUs1b3NRdkZWK21jUVI0dkE5S1pnVmRTckxr?= =?utf-8?B?MXpUWGFweXhCZHJyRTVrdEEraHZLcDM4Uy9ia1lyZ0U0bTdvdFVWT1BpN09I?= =?utf-8?B?OWFWMThzZ1M4WVNXVE5hYmxHZThqMUw1R1hyaDlINC94N0RmTGp3UEdBWjdq?= =?utf-8?B?V1N1MjdweFFUWVhUTndzc1kxZjBlTnh5RWM3TW5hSWplb0dxdjNsU0g2bzFJ?= =?utf-8?B?WnEzSk04NEZ3YllvU0lNelVvRGt5WWpwd3k5NlJtWjJBMmVPL2xwNlQxUTRa?= =?utf-8?B?MVFiR1VQRDRSY00raFVsek9xMWhwVkdwdTY3dWFRaytWNHF4UDhBZ1lUVFY0?= =?utf-8?B?bmJlaFZqSEZYQTA5TnFsOWtYbzZlMWtZUlByYU0xbW9vUXlFdmJLdDJNb1N2?= =?utf-8?B?cGpzSXR2K3dNbGZPamliRW8xMm91T3BLNFpscWQwellyT3UwMEpMa3VXK1ZG?= =?utf-8?B?SmE1UGZVcnJ2K2xBNnVPdU9aaVVSMWJPcDlzZkhVako0dDFEcU40S1NaMDcy?= =?utf-8?B?TDNMZjJTbnZzWWtNU0JWeDZCdWc1TmZMUnQ1ODMyVVRQc1YwbkN4MUxVYmho?= =?utf-8?B?SlFqS0ZldGw3Q0E5UFRXVnJJZWEzdWp0UVhYVXYwdDBTNXVNdkxuRlB0V0Zs?= =?utf-8?B?VktpeDBuMFZVSnZHWEJ5T005NU9nNHhYMFZuMU9mN2NJakxNTHFrQmY0c3Jh?= =?utf-8?B?NWtXSVIydGs0ODVMUTFtRnowU2FRQUorRGUyRUFHeVUvRHRWUTc5TGZBVDZV?= =?utf-8?B?OHY0cmRzclg5UkR5QlAvUDJxZjB4aVJRdjBZMUxmMS94NFgyQ3pXcVJKbkZJ?= =?utf-8?B?K04wSnFlT1lSWHg0ODBEQ0crUXdTZkY5WGR3eUNPTk9MSFdEdU5xQngxRlJG?= =?utf-8?B?by8xRmozaDhMY2MzcnFxelM3MzF5WjZyZTZ3V3BTWVNZWGpwSmk4V1RYWGoz?= =?utf-8?B?MWlUN2lpL3hDelBYZ3ZtTEtEa2wvdFpnNkk1b2FIQXFtcEdMdUo5K2RTcndL?= =?utf-8?B?Z2FjV3pBRERaUjE5Y3cwbEhGUEI4eDR6RGVBQ0twbTVXRkhGZy9yNUE4djlj?= =?utf-8?B?Y1RzdXg0TDBlNFpkRUtTdUFvM0NDdnlwZlRaSXFKbEFiZjRrUGNrdnVzZjRh?= =?utf-8?B?Njc2QnZSeU9jbUhRTGx2UWttcS9nYzZ0VmRxd0x4MUU5eWVnQytBemwyRjJS?= =?utf-8?B?RXR3YWlCVkJ5bFRpTnVjb3Q4Wk80NjNmZFl4OXQwcUNyTDViTmcxTzIwVFZZ?= =?utf-8?B?NC9SZXQzd2dyVGtGeVNWSjAraGlvMUlybFZEVjd1WlRIUUxieldLRHFJcWdV?= =?utf-8?B?cHI3dzkvUkhsallxWHNHdkVQdnFKWWxWM2tqTDA1Y21hcnRIUXBBeUYwRFRI?= =?utf-8?B?N3NZaEl3Sy9jZVBZS25rcW1nQk9EV2xwY2l1VDhxWTFwbWkwa2xKaXZKTTRC?= =?utf-8?Q?1lBSNkmZbC0EY?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BL0PR04MB5140.namprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cHYzUC96NDdEYjBWRkNwb1NlbEVXUGYvODZuSGtjK3hQQjlOZVIvQnlQaGJ3?= =?utf-8?B?VGw2OEs0dnhEU1BWUjRKRTNYZlBTZkVLSTRIU2dYVitZR3hsNG14N3BQTFhG?= =?utf-8?B?RTRGdC9FblVBcTZxUDJzYTZJL1pua1hsMFd1dzE5TnlHRmZUOWtCcnpNdTkx?= =?utf-8?B?WU1HVEc2V1N5NG9DUzVlYTlxbUt5d2hhdGdhMEwvV1pLQk9seEJ0WU8vbEtk?= =?utf-8?B?WW9teXl4cU8xUnRxMENoR3c5MjErUjREb3h5dzFCSWJBTS90RC9qU2NON3p5?= =?utf-8?B?VWNMNGpTWkZ3NlEzTmRpK0dZeXk2WDFGWW1kY2k3S0xkSGgvODRPS0srNm5S?= =?utf-8?B?WmlEeFN5RXhoN2VmL3BOaVQ5dzFzdXJIMlN0Sm1HcDNJc1RSN094Sm9rMEtl?= =?utf-8?B?MEV3M3IyQmZzUitQM2E5SWorb1hQRkxDMXZRMGVFM2JyRXJhOWhuTnZZdHJE?= =?utf-8?B?OTVaQVl3VFpWMk9zZXpYZVFOMFJJeFNOMTJBRTlzMEJlb0hxaVJPZzlrbVJy?= =?utf-8?B?djJWdXI2U2VyWnBseVpGeDRpaUVkYXZ5ZXRTekRPY1g3TlJTN0Q3L0pvZWdW?= =?utf-8?B?aFpMMThUUUtMRFNqanduS3luZG5tOUcvekpabWE2bVo4WXhIekx2ZTFrdkt5?= =?utf-8?B?ZlRTejBVU2RvdHlhemlUSHl1N0cvcWtTM3lGbWNLOVlxRmt2Y1d2eEFuUjBy?= =?utf-8?B?YkR3TkdJcVlFUWIxc1ptUFJ3bC9Udm5mbkNLRVRkK2JBS1pBTHlEdURhemNM?= =?utf-8?B?NzAxd1gxRVJxTXU1WlhvM0ZGSG05QjllY3JLTWRvQUFxa3pVTEFpSHpDN1pG?= =?utf-8?B?MXA1cEp2Zy80bkVQL1lDWFVCZm1LSzZYbUxtWGFMZkNUR0VFQ0E5WVh2R0ow?= =?utf-8?B?bHhZQTBMN1dwamY3dFYwVjFDWkJvSVR2cXZSMFZqWnd6Ky93eHMxMGdPWldz?= =?utf-8?B?bzJ0V2pyK1M0OXpubkxCRnNlTjd2bVAvZnRlbmxxNzBrckcrelBITmEwM3hJ?= =?utf-8?B?VXNNWnRiSGJBeHIzMlpUYVFhTTJoZ2VqeWo5YkhHSzI2NC9DYXZRdzJwYUhK?= =?utf-8?B?Q2xkUWdrNUJLa1VYMTIyRW5zVkRtQlRjMkhBSVJpS0FWOFJ4YjQ5d0tGYVVq?= =?utf-8?B?bC9mSXhTRWdqZCtxaDVBTDhUaGpmaCtWOS80LzVwektia1lEY3lMSVhJZE5U?= =?utf-8?B?Y1RRN0h1N1lENG9EMVkxS2VRdjV2cTZ2eUNSOXdNN3ZaNEI4L0pUa0ZiK3pm?= =?utf-8?B?SDhQNzZxSytRRGRqZHpzWldJSzJVRnhZNURnN2dISlZuOTNaMW9wVHp3TExX?= =?utf-8?B?THgxZktlZG54YXFpT0pJU29RTDN6Z2NOL3lQSzlvampKaXE0blpOVjlqbnJr?= =?utf-8?B?T09SaWZ3WjRxM1J6Y2xpeWFKQTdzbEF0WDZGV25STzl1dzN2K2ppM2w4TlpG?= =?utf-8?B?SVh3SjZ2NlV6dUxTUkNhZUh3c2F3cmZuUXAvaXJ3cWdxNVNVbXdHZzAxQkdu?= =?utf-8?B?YUh0bEFDSUszOWJiaEtWZlNKSkRTenA3TGZWNlRoT2VwdXpXeVRKRjNqYldk?= =?utf-8?B?Nys5eWhCaXdZellzNElvMmFYY1lHT3NLOG1OZ0xOSmhqWXU0RFpGRy96OE1B?= =?utf-8?B?ZmEwcFBzNzh1Q3cyd1hJZVIwYlViTEkrVkVXOEpBTEN1K3hYK3hXMlM3VXk0?= =?utf-8?B?aUtVTDVkSmU4Wk1Sai9ZWHRWQ1FFbDJ0VFV1a2xRUEJSUW56cGdSOFExNm9T?= =?utf-8?B?ajBzK0VXOFBUcmRTVzZtN1hUVVMwZENOVmtzVWwwMmJPKzVZMm8wMFU2aXVu?= =?utf-8?B?RndVLzR0REZIdUZNblJrcG1HOTc3Z05hSGlFNnFBK1huZjBXQmIrK1hKVi9H?= =?utf-8?B?eTFraGc2OTk0M1VIYmYwUGIva2NWczIvTnhqVjZxOGJGTXlwK1ZwNGNpMVpy?= =?utf-8?B?U2VHTUp6VDcxRFRkUnB2ZHZldGdVOUFzaktPS1FCTDBoWURKbVN5OTN3cjNq?= =?utf-8?B?QjFaMFNMWVZhY3RRNkg0c2s5RUo3Z2VFNGY2RU5KUW93VVVlYUJMNm5MekZF?= =?utf-8?B?RW53QlcyZkMzUm01YW1FUHZMaExZdWFJa0xkSUJhTmxueGtJcnJWcDQ0UGFz?= =?utf-8?Q?h1d9sMiG3vECmCmLdD4YIMTBk?= X-OriginatorOrg: cornell.edu X-MS-Exchange-CrossTenant-Network-Message-Id: 9f97b712-20d9-4950-a52f-08dd1eb04912 X-MS-Exchange-CrossTenant-AuthSource: BL0PR04MB5140.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Dec 2024 15:34:25.2249 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5d7e4366-1b9b-45cf-8e79-b14b27df46e1 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: JaOzW+0enGW4BNYjcd6d1yJHxxHNLPSlTBAjvBYYO5Wz+BLe+GH6dVUzvefIFK2/Th2QyAF9A1DAd3bE6D+ONw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR04MB7774 X-BeenThere: cygwin AT cygwin DOT com X-Mailman-Version: 2.1.30 Precedence: list List-Id: General Cygwin discussions and problem reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Ken Brown via Cygwin Reply-To: Ken Brown Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: cygwin-bounces~archive-cygwin=delorie DOT com AT cygwin DOT com Sender: "Cygwin" Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by delorie.com id 4BHFaXdI023371 On 12/16/2024 2:58 PM, Ken Brown via Cygwin wrote: > On 12/16/2024 8:32 AM, Corinna Vinschen via Cygwin wrote: >> Right now, mmaping with PROT_NONE and then re-mmaping with PROT_WRITE >> doesn't work.  Cygwin implements PROT_NONE not as MAP_RESERVE, but as >> MEM_COMMIT with PAGE_NOACCESS.  mmap() doesn't check if the requested >> pages are already allocated with PAGE_NOACCESS and then succeeds while >> in fact just changing the page protection.  This is basically what >> you want.  Right now, you'd have to call mprotect() instead. >> >> With anonymous mappings only, this is all just adding a bit of code to >> mmap() to do what mprotect() does in this case. > > [...] > >> So only anonymous mappings would be possible, assuming we tweak mmap() >> to check if the old mapping was anonymous either and then allow to >> just change the page protection, as if mprotect has been called. >> >> And, funny enough, something pretty similar already exists in mmap(). >> See mmap.cc, line 1051 and the mmap_list::try_map() method.  Right >> now it only checks if an anonymous mapping has been partially unmapped >> and can be recycled.  But it could be improved by allowing to recycle >> the anonymous mapping either way, as long as the new mapping is also >> anonymous and the SHARED/PRIVATE flags match. > Thanks!  This looks doable.  I hope to get back to you with a patch in > the not-too-distant future. While looking at this, I came across a bug in the use of mmap_list::try_map(): On success, the recycled pages are given the same protection they had as part of the original mmap_record instead of the protection requested in the mmap call. This is done in mmap_record::map_pages. Here's a test case: $ cat test.c #include #include #include #include const size_t page_size = 64 * 1024; #define BUF_SIZE 10 int main () { void *mem = mmap (NULL, 2 * page_size, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); if (mem == MAP_FAILED) { perror ("mmap"); exit (1); } if (munmap (mem, BUF_SIZE) == -1) { perror ("munmap"); exit (2); } void *res = mmap (mem, BUF_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0); if (res == MAP_FAILED) { perror ("mmap"); exit (3); } if (printf ("Current string = %s\n", (char *) res) < 0) { perror ("printf"); exit (4); } strncpy (res, "Hello", BUF_SIZE - 1); if (printf ("New string = %s\n", (char *) res) < 0) { perror ("printf"); exit (5); } } $ gcc -o test test.c $ ./test $ echo $? 0 So it seems that reading and writing to the recycled pages fails silently. On Linux, we get the expected output: Current string = New string = Hello Would you like a separate patch to fix this, or should I just fix it as part of the bigger project? Ken -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple