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 88F28C3ABC0 for ; Thu, 8 May 2025 09:07:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B3FBE6B000A; Thu, 8 May 2025 05:07:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id AF1AC6B0082; Thu, 8 May 2025 05:07:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9BA0D6B0085; Thu, 8 May 2025 05:07:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 7CEDA6B000A for ; Thu, 8 May 2025 05:07:45 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 190881D0065 for ; Thu, 8 May 2025 09:07:47 +0000 (UTC) X-FDA: 83419162974.14.56620C7 Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) by imf24.hostedemail.com (Postfix) with ESMTP id 3D636180015 for ; Thu, 8 May 2025 09:07:45 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=OEi1hylV; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf24.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.215.169 as permitted sender) smtp.mailfrom=21cnbao@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1746695265; a=rsa-sha256; cv=none; b=KWdNE4yb+RxdrpIjYCkNqMofNLW5ih3jUNha67DxMjqaTTokUElskkVmaoXIf9eEXOof7c tvQdNz3JLAr3S15aE3F5SXw8UTsG202UkKacEG3FMn4MxubfW6TwjDQp9lRMzYZJ1gp3T0 zhYhnRCPzaiYnIllIKrT/a+t40+bRVg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1746695265; 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=G59wmYTEp5CZVNWd3zANz7fLvnvyW6wlXmFfNSZ4Nas=; b=qztqAUatbJgrOS8Fq7MzKlVciTZCFDLZQzicpaA7ehpKaJRaiIjWaBD0/uYDzYBUONEd4P pOrA9pvewxOdaafYZvhMMQZFcgDtjj+6t7CzrUHBRLVgG3tb1A38+1zc6BpL9jNglQMulA 1x5M+hzLun1o2fJThQ30BjTHWaZnC7g= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=OEi1hylV; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf24.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.215.169 as permitted sender) smtp.mailfrom=21cnbao@gmail.com Received: by mail-pg1-f169.google.com with SMTP id 41be03b00d2f7-b1ffeda9363so367691a12.1 for ; Thu, 08 May 2025 02:07:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746695264; x=1747300064; 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=G59wmYTEp5CZVNWd3zANz7fLvnvyW6wlXmFfNSZ4Nas=; b=OEi1hylVmYPkyafg0G+3BXr39fcvAD/fL57XA/nAu2jnDyQPiwkCprVt5uV/U3daKX b4Skdh/rYN59cArZsYHkz7nlYJPTGl04k61yKM4XhYrUZHYiQYS2tOfqcuHU4COD3ro6 izEdSAr1iSMRljDwnKcNKjBkZIK6P2txCCT28WKSrGD+xyvlJX+NuWPXS8KUFXXL17px J0AlR982Poe5kt3x3pJmJnp7XyWObwhdugpboaf5GYgLNCpQTx77HXNG/dUs5GFGYOAD casG2qIYeT9GPDN1UgwYYy6//kj/PfFE1EKYAEtN4zhhOKTcE4fjkzS+bgJFqQEH57C4 6H0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746695264; x=1747300064; 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=G59wmYTEp5CZVNWd3zANz7fLvnvyW6wlXmFfNSZ4Nas=; b=R80fyNR/1mBkEtbAnWNeUdRAj6eEP0CJEj74q7eYaCdYFLt/3iCuAkltkuXy7e8149 ggPxPGKlKqvyw5H1TBLtj9QOWqg4FEoBYFOiwqJo9GvAmis2tXPfOC5DJFbq7f988C61 E1tQ+XGm9zY5ZxPA/6QA1HmuszjUEI6vHkhYxLHGV6UqhRfbPz5MG61P6RlEc3tkiU0N JTmigUbM11RrJ1xr3uPoDlafczwSxdUHb1qhQTBhIdQKcyT5Gkqj8o1M9juXMm4m3O3z 4qKSB5eZQhuHL27X8q9Aa9w/nxCqi3U3IJbBMRbQeQk1V/KLQksAyL1jgBvAiXNgC7fS lDTA== X-Forwarded-Encrypted: i=1; AJvYcCW6sw4fi6ennlQRuV1gK2rloXu0oTp6mx13guyELF5nknztLNXkYhbNXLGKDfoasGrQdZikeODC/g==@kvack.org X-Gm-Message-State: AOJu0YwU0NfWAq6ltHHYhUxLuWEenaqcrs61wZKZlzOigdzB+hKQN1lH 1gVVetl2ap18bsUe5eRYuiHJXfqZaBSAVUlIFLFv0WIodg0aEghf X-Gm-Gg: ASbGncs8pisncy+G1AG2K0VMV2Xt4C3ckShHk4MwyqcWQ/5nbxIPca0JKWY7Qoye2TO z0HtnAuWxTCH31d42u50clsFes093+MtgfJ7w2OGkHPyBbC4sUxxu+nyhJLl3YebjBzQPAizJeM B3KRcVFaz6ldqFcroiE0lEn5E2ZKhcFejJSsLhaO0SHEdWm8uNtxjOMB482R3nnFZhWECL2qVuc LCEcqd1blvP3SGEw1zqy2AjvpqxAjjVdy+iY41hCqKXz8fvXp1NMHnQr8mJTf/fzBsOGBBMfy/f tnnEsHa6HLrLcQ+Y75YnJz5Z5CVLDMWT75NAYwAIDYdMm39CRcD6z5ipAw== X-Google-Smtp-Source: AGHT+IGiE8488YJK1sIW3qbGbcFmbvSB7DRXNdU/o8vJJjPjJcjqo8+MYtY0hX9blpGRgL6LSyZMwQ== X-Received: by 2002:a17:90b:38c2:b0:2ff:592d:23bc with SMTP id 98e67ed59e1d1-30b28cdc729mr3619651a91.4.1746695263949; Thu, 08 May 2025 02:07:43 -0700 (PDT) Received: from Barrys-MBP.hub ([118.92.10.104]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-30ad4d54ff6sm1696043a91.25.2025.05.08.02.07.40 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Thu, 08 May 2025 02:07:43 -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 Subject: [PATCH RFC] mm: userfaultfd: correct dirty flags set for both present and swap pte Date: Thu, 8 May 2025 21:07:35 +1200 Message-Id: <20250508090735.39756-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: 3D636180015 X-Stat-Signature: 9gao69hm1iamaoi9pix67guagrs8bgj5 X-Rspam-User: X-HE-Tag: 1746695265-229661 X-HE-Meta: U2FsdGVkX1+xSaREOZfpd2iKVU72b2Tl2MDGzrWjOJZz+oTPycgF3Ynj0eU9tggSWIaz3iYdZaqnqGqfOlzfyfx+Y0nU5RFlIMg5B6XZTyoElBwFfXQ/fEe9MAh2Gy4cmtAlMb2X78hvRyGm5w2OyAcXuPkKJOtJF7sLRAtzHooAkQUSx/L0q52JNrG/6swS0PL0sYeP9sHy2DlBudVg8kqHdWj9j6VhLpZaFfpwY6tsJxczogRqJmnPE+vExL5UvtZxAPJO71hloTpzKuS18c4BH0Qbi2/28VL4fJJG+GZ0tnIe/yV7KXYpE7UXfVLZlXmYJYpufRdzjWsIbRZoselhsRygYLWFBEGYp3cdJ4843pzzPIFfxmHmcYq3Fk+abTPrbusvLI6s1jxvJPKW33MEo7A+zknGIB+mu+zdd9d517B+eUyrDz8cTgxxNG+Keydex1zSNMZcjfsnhbqd5w0gezNYQlthEskTNbt4MRdh7dFYrK85ZcCf2QY4q/k6ajFbDUW/0koJpmhJIcI7ojFNqIQzJAb8B5XrkLBDFbYBvEVGskku1+QUF/ZliADBTwjebHGjt8iAWLuoCBQqR0Yi7mR3OGS/i8VNS9wNU13jAMO3BSFI7qRsOXB9RT9c3Am4cwFCZsm8euU3vaFiD0Ug0JSTKrHlppgWCy0EVEVHbnOtman2Lfq5ljYf4o4LBoVTP6Eacb4RaO0ajaNH+09bZBWH7ZFrim//74UkZMzbL+ZMnjr7m/lp9YS/rohR0gL+1LeiIi1cvDD5KwXJxKOvIYEZVTO1dLDIxBqF9H6WNY1UI7tg8pa3e7xvd+f9rfWciioMX+JD8Ao+NiPrrY9gZm4JfqExWi0YZQzt4+n2Hf7/1CA+B6PzD1XfB3znif4zk4F7r4wrmv0sMU5AtxekNTiFzdeIG3EeeGOmIg/guPcrLWfTALriKpggVrkO8tTNg0VK3nF+Vd20qDs Fpg/dxeE raOitofo9w1m3KlUu/L0QKHMDWc85IYhI8qpTac97TPPxc92esMKmrBR6RE/Py7RVFG0ZWpym3u/4xpzrOsK5yPPJZk+eEBVLkQF+LpKitiWputi8eRQtdbtY4+4JWz0iIXYPneIWt54Vab1ylqBEcaIDSn4B3x+HalEVSSRtj5KnTiAQnTYa4LvI3EZ4ff6Y2AjY+HP7CTFdK99I7leYnClvfdhT+Vu0gIOKUdvF5HNMGFNk4o81S1G2JoWGeWaM7ZhSe3NqKCnk66Zzbe+Tiz2laQs4y5fI7u5zKlqHva2teQ+T0xg41LdV/fBERYs+7QvgK7UjPLyZsRw1cYSWpgnBoqUjr6lXGjbb3J+EHyDQID4sSH30IyrOVwWGUwe1MPMRjWainvKABS9UFQgdTTInQcnHM5kpxGzOgtbkeeYzqKIzODNURl39MVSOCeHxSEYFFhudVtfSIjHlMgG2g0Ex6akqpd3dLxqZ 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 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/ Cc: Peter Xu Cc: Suren Baghdasaryan Cc: Lokesh Gidra 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)