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 4EA7EC3ABC5 for ; Thu, 8 May 2025 22:09:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B74636B00A1; Thu, 8 May 2025 18:09:25 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AABDB6B00A3; Thu, 8 May 2025 18:09:25 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 923A86B00A4; Thu, 8 May 2025 18:09:25 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 6E0B76B00A1 for ; Thu, 8 May 2025 18:09:25 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id E7C841A132C for ; Thu, 8 May 2025 22:09:25 +0000 (UTC) X-FDA: 83421132690.16.7CC1AAE Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.173]) by imf25.hostedemail.com (Postfix) with ESMTP id 140A0A0008 for ; Thu, 8 May 2025 22:09:23 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=fmeD4Qs4; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf25.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.210.173 as permitted sender) smtp.mailfrom=21cnbao@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1746742164; a=rsa-sha256; cv=none; b=Dj53bMhqLhWbY351vT9LOJJ1noOESVIorWuqA5etdg/KUZSzNTWZdG2+JDdPrg/3wSP8Qa B9s7W+YEB57Kx/Uc4JfCS9Cj01t5SZBE3toHiP38SzJr11k28e38PfpX1bvnBiMC0VSjjw IbFBRZI/uQzvB7icC/GrD+P1qpinVWU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1746742164; 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: references:dkim-signature; bh=izwRWOO45q1gJjUhAd8RLBY3xuEu+OORG94FpQzpIq8=; b=VnCwqBqxa7IXSX/ku2jrjWapxT54ojyHQ0UT8zL1wwxLCCJqGWk3tKfdOImoEvZBgtfaFK +MI+HsaNmjKyGaZiH1E5xcWhsIdzxGkvztGAiUmG1ynzS8SMOrDd9BehiflcehyihBEY5l p/r8RAaxA23i0xQkYLNeV367SREtOzM= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=fmeD4Qs4; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf25.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.210.173 as permitted sender) smtp.mailfrom=21cnbao@gmail.com Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-74237a74f15so614235b3a.0 for ; Thu, 08 May 2025 15:09:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746742163; x=1747346963; darn=kvack.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=izwRWOO45q1gJjUhAd8RLBY3xuEu+OORG94FpQzpIq8=; b=fmeD4Qs4CKx2usXE+TidiZhI6wXPU4++YALqXLr6Sev1ClfElWdGVb00z5DSyIAb/c QhDXBsoURd+d/6QRXHiKj9CYLsodGy5VqbKp8CA69zA0b/66sNVIFR4fn99THq7Y7dvq Sv2x8RoCGnj0zWr3idX6Jp7s9V/LgzX7OST2rpi/VHAb2gnd8zAhzWEL+I9eL8diMeqk vF6xlLeAxxyI4rtYwT53ErT8i5c7BBfDf4EMJMTzmKA6KFTjGpz5TDT/5OdtWVWhTkFn cW8chI+9SeKInhxI7FPe/XDDqfvjqqctkvFG/O3K5BlkM77wum5D00WrKYDugYnLhDKY 1m4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746742163; x=1747346963; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=izwRWOO45q1gJjUhAd8RLBY3xuEu+OORG94FpQzpIq8=; b=hTB83HYQqaQmqDEg+0ixGNIpw1ObmwXsR7inmPjdG2hur6kPLOdrM+xAinV4yNQkoH t/IXjbO3CyH6mRBQAzaEYvo65E+pQcQKuYmAhNsTyeUrOfBObU2/1h8iPZRJG7FzLnXp OWb4Q6jw3G+n5bC8O5S4eWh4uC3b0cW6K/PdfD428jemMP+u5rMqmqV4a/MK8OtKCm9U 7uW0CBWtpWVN0rgbr/t1K4YLccw+l+4OGtt2mVYaQhXf7TpUtkiSC7mj4DRz7XwQW7VH 3h93VmKC0TF22t7dAosaeRjkZrA/nAlgw5VxJNPkA/QIVqVu5RDLECs+x/gTzUnSdR/z FCkA== X-Forwarded-Encrypted: i=1; AJvYcCXKBj530l4KfTN9sUHq69PYAJiI+8l35a24a9CLt9BGUkGjXBRHy3y+NqCS4XwpydOp73YsjKYbMA==@kvack.org X-Gm-Message-State: AOJu0YxXsjQ/dpr19N6ua4wAwkHkZiRbKrPH+585ZBRaiWg5h6Bl8Jn/ 3t/qqjOv7Q9gGjQRKF09oiWyBfrtoS5/6GrWU8TeACyvyo22DX/G X-Gm-Gg: ASbGnctl+X0/P3XtaXKs06nAl6fDpAGiU+mrf44stc4gAzLwLUHo4LvZu6/SfURM/hb OKUR5QBT22zl49m4OI//TQ7CQ+aJj6SH4O7VtISiNTCEliNOxRq4TzTo9vwo6w6dFpevIi0zvIz zVGZGlJhmw42aEUD7s3vFuhSJlymRNIJ42nJIgyY1L19zoC+O49UahpZAG4/Kc1Oiv8396UUQT1 bGm/JIPBjRQ3Okcak7w4qDknxpJyrseOkRxB+eNuxNa8yBSSUs0nhyVTzXkqFBG62xbijjFLvrN mCuJ2A69NxDcTxoaohj4FVvjyglsPOs9sLwSbRTY8x6uJkwPX+3xVTYX X-Google-Smtp-Source: AGHT+IFkZ/rzCCAl+euvoNiSCCwS0EK66FZhD9x1Yb5CCdnY4h1LOdX0thkT3oEe3BUDFyuGOmH/aQ== X-Received: by 2002:a05:6a00:4148:b0:740:921a:3cb4 with SMTP id d2e1a72fcca58-7423bd57d80mr1528325b3a.13.1746742162742; Thu, 08 May 2025 15:09:22 -0700 (PDT) Received: from Barrys-MBP.hub ([118.92.10.104]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7423772750bsm533327b3a.42.2025.05.08.15.09.18 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Thu, 08 May 2025 15:09:21 -0700 (PDT) From: Barry Song <21cnbao@gmail.com> To: akpm@linux-foundation.org, linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, Barry Song , David Hildenbrand , Peter Xu , Suren Baghdasaryan , Lokesh Gidra , Andrea Arcangeli , stable@vger.kernel.org Subject: [PATCH v2] mm: userfaultfd: correct dirty flags set for both present and swap pte Date: Fri, 9 May 2025 10:09:12 +1200 Message-Id: <20250508220912.7275-1-21cnbao@gmail.com> X-Mailer: git-send-email 2.39.3 (Apple Git-146) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 140A0A0008 X-Stat-Signature: njrjb3ur9my1ybptc9xy5puu6pkzr5rn X-Rspam-User: X-HE-Tag: 1746742163-430136 X-HE-Meta: U2FsdGVkX1+znEEXELFoa/jDT+5P8sylKik4m2ESgFodwQuFOaolBgM3Q+Uk9DE0AAYHuMYQ+G8fgrJ45jTgKhG8XJuJ35q9PfpmgR4CxiwPrKQbzGAeonb4vysLlb4kMkrPs84qsrTuA7hbNuX4GcpKUplceXuvkL3Tri7lB6Dv+I4BVcD4E/qQPOJr7zu/Nf+r2NcvRwlHGRqJMWcjV4H70Bu7Tw4L8g3+4AwIZYAOIwFhgty59Y63WdgMSuEqB/0jemEyV3BLbP+FJkmNBMOp0Gb2y1+fIymcaHw6OjfIjqiOZq6ubuDJrU/lrsVWV55dp/LoukJ+aKBxR+0yqQuuRduRQARuNGKSIf0389lmwsJVKAR35D3yPZnRxwH6O/O+mxAyXHa1SxgLuqRjVAfT98jp87nCjqQ/uZIBUauAVp2JexYIY/e8ciUiT9121KSrW7rfQT36PAkZR5cHcU52A9EflLkHo72pueRns22NoQed2Es+4zDXHtTR3Dem8lncUHDYWoUEn4fwn8iJtWcCJOyJ6YVwypAdDxWcxtyJxhJ8loUNRjzTxMkOdaHAnStakIIcsXSjnQ+AHACwHBESioQLI/mcvfE/+wnj1SrVpf4SpKLDu1z/iz/Xo1qwzCaGu9YOAVtVIlvLmLNpTBfmGaNdyePzeRwYEuVtvCg2uaTNbtOsMPKsTlLkVHotb0JJlbbhY6FtV7RHVesMrWLIjz2OaL9BFZizat1Q+CFn1AH4dgr3TL+YQ0uShxC8fKvni/oO62znaRWTRVlQsAQVaNVBfsbxT55Nk6p4dnb2s7hVA7cghRCyLuCSw4QR4Wba+5vxoseAIKX+ZHmRUga9NlezDuygxmqeK/O9AXvSGs8+zj9pUdqRmi/X/vIVEYzR/s9a2X+haKuPQW9ImQps3kHvO3+1orc4qfPwF6A68IxA+1avi2TutBkqkRfkgJ7l2RSPwKiWjWl1lPw MF/d0zMU 10qslw6CUbkvpCS9sI8UOaP9XhVNEFvdqoZA3Fk4yt+CCYr/dLfj4WqBeRtQmQypCqIcdBye52bTNUiMhuQI0+4mzH/H+U9+Nr79oRX+dSrRoUXbCJ+0V1V4WzZG4gMMBceQaVkz5CG1l25RjQ1zwsKgvI08NN1dun5xjkPdU/XbKkgeFtO2TQJJNIRod19i1DZLJ/FjilA5Sp7J+/4g6NJWmVFPP3VlxPlUOxxza8UJ17dkm/oiLfkgAhYmZY6dPUA47oFAEASFZqxvpkQRWkSoA5W7aN55MlT6dBJjrKvqG1on2nON4GFrqOixsHJ5jV01ZfLuTjyMlun59sL5zQMaSu5rbdAYANHMD6D23bi80Hmtkh/AUY7P6maklPpKdaPofrPSUiGZs6NQ0Hxec2z/hJrI1d1jt2BI8kTPDtK/bP6IyuaD+q3bFtmkNOU3YLYzRowUkdaFuD/b9UA3l5vYiOrq3FIzdButY 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: List-Subscribe: List-Unsubscribe: From: Barry Song As David pointed out, what truly matters for mremap and userfaultfd move operations is the soft dirty bit. The current comment and implementation—which always sets the dirty bit for present PTEs and fails to set the soft dirty bit for swap PTEs—are incorrect. This could break features like Checkpoint-Restore in Userspace (CRIU). This patch updates the behavior to correctly set the soft dirty bit for both present and swap PTEs in accordance with mremap. Reported-by: David Hildenbrand Closes: https://lore.kernel.org/linux-mm/02f14ee1-923f-47e3-a994-4950afb9afcc@redhat.com/ Acked-by: Peter Xu Reviewed-by: Suren Baghdasaryan Cc: Lokesh Gidra Cc: Andrea Arcangeli Fixes: adef440691bab ("userfaultfd: UFFDIO_MOVE uABI") Cc: stable@vger.kernel.org Signed-off-by: Barry Song --- mm/userfaultfd.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c index e8ce92dc105f..bc473ad21202 100644 --- a/mm/userfaultfd.c +++ b/mm/userfaultfd.c @@ -1064,8 +1064,13 @@ static int move_present_pte(struct mm_struct *mm, src_folio->index = linear_page_index(dst_vma, dst_addr); orig_dst_pte = folio_mk_pte(src_folio, dst_vma->vm_page_prot); - /* Follow mremap() behavior and treat the entry dirty after the move */ - orig_dst_pte = pte_mkwrite(pte_mkdirty(orig_dst_pte), dst_vma); + /* Set soft dirty bit so userspace can notice the pte was moved */ +#ifdef CONFIG_MEM_SOFT_DIRTY + orig_dst_pte = pte_mksoft_dirty(orig_dst_pte); +#endif + if (pte_dirty(orig_src_pte)) + orig_dst_pte = pte_mkdirty(orig_dst_pte); + orig_dst_pte = pte_mkwrite(orig_dst_pte, dst_vma); set_pte_at(mm, dst_addr, dst_pte, orig_dst_pte); out: @@ -1100,6 +1105,9 @@ static int move_swap_pte(struct mm_struct *mm, struct vm_area_struct *dst_vma, } orig_src_pte = ptep_get_and_clear(mm, src_addr, src_pte); +#ifdef CONFIG_MEM_SOFT_DIRTY + orig_src_pte = pte_swp_mksoft_dirty(orig_src_pte); +#endif set_pte_at(mm, dst_addr, dst_pte, orig_src_pte); double_pt_unlock(dst_ptl, src_ptl); -- 2.39.3 (Apple Git-146)