From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0ABE2C6FD1C for ; Fri, 24 Mar 2023 14:33:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 86D4D6B0072; Fri, 24 Mar 2023 10:33:49 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 81D916B0074; Fri, 24 Mar 2023 10:33:49 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6E4BC6B0075; Fri, 24 Mar 2023 10:33:49 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 5BFC36B0072 for ; Fri, 24 Mar 2023 10:33:49 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 298E3160AA6 for ; Fri, 24 Mar 2023 14:33:49 +0000 (UTC) X-FDA: 80604035778.05.C777D23 Received: from madras.collabora.co.uk (madras.collabora.co.uk [46.235.227.172]) by imf28.hostedemail.com (Postfix) with ESMTP id 19D13C0005 for ; Fri, 24 Mar 2023 14:33:46 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=collabora.com header.s=mail header.b=kYLya2aj; spf=pass (imf28.hostedemail.com: domain of usama.anjum@collabora.com designates 46.235.227.172 as permitted sender) smtp.mailfrom=usama.anjum@collabora.com; dmarc=pass (policy=quarantine) header.from=collabora.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1679668427; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=vXleuNJKAIv5QRocgHb9hNMsrImpQnIwm+SlN4H5B5o=; b=r9TilDSxWVeAMyr5k2sfVUNlMRsc/tVTjXyRL7HrsXYhoq9vykpp4SDHNbHHaNeTBiO/AL enOSS6cOWGzfIC4bttveJIM2j9WxP+OtCqxMBToz0RkSVD4qEsyLx7wJlef1FIeveQ8Vf1 Mo59UVcRbKL/A1pDgBwkJYR/8tfnlKY= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=collabora.com header.s=mail header.b=kYLya2aj; spf=pass (imf28.hostedemail.com: domain of usama.anjum@collabora.com designates 46.235.227.172 as permitted sender) smtp.mailfrom=usama.anjum@collabora.com; dmarc=pass (policy=quarantine) header.from=collabora.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1679668427; a=rsa-sha256; cv=none; b=K3IwD7x/I5HKy4a7wm2d3EBliu8/XqbZ3wQ86nfLy/sN/8J5i7SfQETmz/dkDyyrJHLDT7 bsgL8xIhXPy2PrXYCDJ32ZlA+TVf4MwUkOEn9LpISQaiHXElcscgE+4dAJAvYr7KCwMAv3 iwklEFWGPqwUGsnU8xLWAUzXMLCBJsA= Received: from [192.168.10.39] (unknown [119.155.2.20]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: usama.anjum) by madras.collabora.co.uk (Postfix) with ESMTPSA id D14B8660311C; Fri, 24 Mar 2023 14:33:42 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1679668425; bh=FkSmg20lGxtuqjYpseIX/FjQ1FIGEcqzgaU/zd2MrUo=; h=Date:Cc:Subject:To:References:From:In-Reply-To:From; b=kYLya2ajCmE2jdUIJt8TOHQreOItjwPJs1N5zpwL9g7lu3tdG+3bAw7bJVi/U7d5J N7gS+hwXqcwT1ieshp7bS/h/UaQl8iimcMMIxqVdOZN0HdIPe8nSTAxZ+ipZIzqzRV HsnysM6pQ7XBr4NFnZLNKZuSSm/s44kOiKkMj9AYX5zzspEOemZY82AAz2QRLb4zf3 d+2eJ7+NmSSAMoWzqUhLA+pFP8GvqewE+UygnnyxoDXFa2iM4VHNyF6POgWKezuYl/ blyo9msPI9bBZh9Kyt6KQFNkjNrZTsazOP1uBsBKd0czT4TAY34Vu/H/9mp639Fd9l cB3lQUt6toEDA== Message-ID: Date: Fri, 24 Mar 2023 19:33:38 +0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.9.0 Cc: Muhammad Usama Anjum , Andrew Morton , Mike Rapoport , Nadav Amit , Axel Rasmussen , David Hildenbrand , Mike Kravetz , Andrea Arcangeli , linux-stable Subject: Re: [PATCH v3] mm/hugetlb: Fix uffd wr-protection for CoW optimization path To: Peter Xu , linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <20230324142620.2344140-1-peterx@redhat.com> Content-Language: en-US From: Muhammad Usama Anjum In-Reply-To: <20230324142620.2344140-1-peterx@redhat.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam03 X-Stat-Signature: 1d6yidii9jn6djz318ckyg87wi5udax3 X-Rspamd-Queue-Id: 19D13C0005 X-HE-Tag: 1679668426-941539 X-HE-Meta: U2FsdGVkX18WSL04mB1Wvtu6T+8yK4BSzXng6vZyl3t3JpAztZI6NsJYZ3uw1rUHgm9fpBEh+ohuhNcch9xQF2GVaPCOBfFp8LUBcEezV6b9/gYSID4j12AV+9abZQ8Aw827mfhhnWzQ3DMJMM7NezNrJAM2WD/9bP8rIDAcivXrTOCNFZJFDDEkRNg4jR/de8TY1YXEbo/DItacK0C4Q3rRkXHUSlxvTRZfImqoT2xxfEQ8g38cMN1dLKM5sjTCI/1rkmjqlMqvH3S3Ped36nJnuhENl+EZO59rb32nyy/H6IM+f+TVPzupunTyDSWrMEAFjqKKBr+TpWgI8NTbZdhlAznaVBq897Tgft/sbC2CFdb5hFLHCSvx9swFHChfKNG1E23NmH95gRAy7q9KV8d2z0rhJ9UBSHVHkch9I2+p2dCgxpCAaIge3W/jOYxjxi4ocgSqk3lvM1kTw+y7fPw84g7FcEFISBaTs6qHEg+qXiC7RkzSiqXMmOUxQ6zlXNEfFtjQs0hfE6GKiYU4i6FpanwQaibmRwAM+FCXh7v2/jNp+InJyec8+PpTxstNZOhPXFSMDo22tJ7XxO9+mebLfE+D7BXHIqgFZFsa+VSbFcHLFMOsZmonuK9UtmYTtSqI0IIXnCi3z5T9xNV3KcTWER6KmF8Ap2awWm/RT0axfYhrV8/uDNFbiewJ8LLMpkjlxcrpYkhXhJ4wm2zR2LttPqN+PO6UQJMQ/9+e/3vA2ts2x7BP9lmSl34FtzrZ6HrlBpwz1Rpq4OREjFUJ2TzOjba/ovn8GGHiSUCIT6b6xGXxCnAS/rrSVYMXdIsWSwht9V7OdRtm6lUCb4Uj/AezzTN6pJvg405IncKgp+ZJe7W7wlQU9ilkgaAG0sSV+bp6/qsChwOBcpeOzD1O59zt58DJgGnkBWs4PocbYmbNpQRh99wiS3HxX3mUxmxcS1/Y5mmrrQ0fhBzy7M3 qC9iIMp2 7xt+mXohk/piDFJMxSJSeGScuq8BSIqYYMphnTfpU3+3SWJvNWqMcbmB3Li6WycrGb0cpqN1O3CSdkbjxWJILP8CyASI/Q40C1S56CuJ6yf9N0ZAlTZlLc5zzMtBe//H7+KZmBzwpyyZ+DH/UVUB66j0jBB0Q8P8Uau9DCBMe+ala7sW2gwGNDvz18czAJF8l9usgzJG4zBFyiZEmZEbbCFIK7DEJRof7Oy9wFA8NRSXIJ0tzaVBSI1uKV7N3vpxElbpDZ56Vid6wE47C8Aqo83e/LNrJpHY1Lg2JA8Sab18R1PKIvHVJI5B12g6S2Y8mg30g1IWW1dZME5CxpXketuTXBeIw1RDzDFsgaThY9o9HTfPXXlRIwR8zk1QjR1n4riLr7KesJ3xvnuWuN0saUaGyLvSoT6MwJ7lMY0WUvr5QmC5Ps6zhUetB670y4OaHaMbhpaTmmmwDr1I= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On 3/24/23 7:26 PM, Peter Xu wrote: > This patch fixes an issue that a hugetlb uffd-wr-protected mapping can be > writable even with uffd-wp bit set. It only happens with hugetlb private > mappings, when someone firstly wr-protects a missing pte (which will > install a pte marker), then a write to the same page without any prior > access to the page. > > Userfaultfd-wp trap for hugetlb was implemented in hugetlb_fault() before > reaching hugetlb_wp() to avoid taking more locks that userfault won't need. > However there's one CoW optimization path that can trigger hugetlb_wp() > inside hugetlb_no_page(), which will bypass the trap. > > This patch skips hugetlb_wp() for CoW and retries the fault if uffd-wp bit > is detected. The new path will only trigger in the CoW optimization path > because generic hugetlb_fault() (e.g. when a present pte was wr-protected) > will resolve the uffd-wp bit already. Also make sure anonymous UNSHARE > won't be affected and can still be resolved, IOW only skip CoW not CoR. > > This patch will be needed for v5.19+ hence copy stable. > > Reported-by: Muhammad Usama Anjum > Cc: linux-stable > Fixes: 166f3ecc0daf ("mm/hugetlb: hook page faults for uffd write protection") > Signed-off-by: Peter Xu Tested-by: Muhammad Usama Anjum > --- > > Notes: > > v2 is not on the list but in an attachment in the reply; this v3 is mostly > to make sure it's not the same as the patch used to be attached. Sorry > Andrew, we need to drop the queued one as I rewrote the commit message. > > Muhammad, I didn't attach your T-b because of the slight functional change. > Please feel free to re-attach if it still works for you (which I believe > should). Thank you for the fix. > > thanks, > --- > mm/hugetlb.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > > diff --git a/mm/hugetlb.c b/mm/hugetlb.c > index 8bfd07f4c143..a58b3739ed4b 100644 > --- a/mm/hugetlb.c > +++ b/mm/hugetlb.c > @@ -5478,7 +5478,7 @@ static vm_fault_t hugetlb_wp(struct mm_struct *mm, struct vm_area_struct *vma, > struct folio *pagecache_folio, spinlock_t *ptl) > { > const bool unshare = flags & FAULT_FLAG_UNSHARE; > - pte_t pte; > + pte_t pte = huge_ptep_get(ptep); > struct hstate *h = hstate_vma(vma); > struct page *old_page; > struct folio *new_folio; > @@ -5487,6 +5487,17 @@ static vm_fault_t hugetlb_wp(struct mm_struct *mm, struct vm_area_struct *vma, > unsigned long haddr = address & huge_page_mask(h); > struct mmu_notifier_range range; > > + /* > + * Never handle CoW for uffd-wp protected pages. It should be only > + * handled when the uffd-wp protection is removed. > + * > + * Note that only the CoW optimization path (in hugetlb_no_page()) > + * can trigger this, because hugetlb_fault() will always resolve > + * uffd-wp bit first. > + */ > + if (!unshare && huge_pte_uffd_wp(pte)) > + return 0; > + > /* > * hugetlb does not support FOLL_FORCE-style write faults that keep the > * PTE mapped R/O such as maybe_mkwrite() would do. > @@ -5500,7 +5511,6 @@ static vm_fault_t hugetlb_wp(struct mm_struct *mm, struct vm_area_struct *vma, > return 0; > } > > - pte = huge_ptep_get(ptep); > old_page = pte_page(pte); > > delayacct_wpcopy_start(); -- BR, Muhammad Usama Anjum