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 1338AC71136 for ; Tue, 17 Jun 2025 15:44:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A2B246B009D; Tue, 17 Jun 2025 11:44:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9DBCE6B009E; Tue, 17 Jun 2025 11:44:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 856E66B009F; Tue, 17 Jun 2025 11:44:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 70EDB6B009D for ; Tue, 17 Jun 2025 11:44:01 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 04AE4C0535 for ; Tue, 17 Jun 2025 15:44:00 +0000 (UTC) X-FDA: 83565313482.22.17A5E2C Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf16.hostedemail.com (Postfix) with ESMTP id B4185180002 for ; Tue, 17 Jun 2025 15:43:58 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b="hT/mZ7Oz"; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf16.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750175038; a=rsa-sha256; cv=none; b=M1j5CPgOLym9LIaZNrk1s53gZzY79Ma51RtMek5XkTGTHpMscW5B/paeIFT9YfEB1J4GBq 7Z2FL3E/UR0HuxOdmocrrdr5OCKxJvfv5+qUvXLSrzpYe9+fbD+oQI2FVe1DR1hyk/PWLV 3AFkDFXPnQKu3lKv4iJyqcsYZshjKUU= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b="hT/mZ7Oz"; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf16.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750175038; 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=VIojkghjiOfK3qS9mo4araH3tv/iIJHq9NK1Pu9RhVw=; b=RmCplWr7c/9TyCf5s6LLC5EG7GKglTbQYwDKuyYNtfoMJwcDxpKxKJ8u09HuW+gW1G67bU KsdNEBEoucAzPq7P4VfKglA7LDdo0dDP0sVy0LWUT6p0Lm0D8Mkuwesl7mV6LYjT7K8k7I zH9rX+QHBQlcmq9lkPQi47SnimQfP8w= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1750175038; h=from:from: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; bh=VIojkghjiOfK3qS9mo4araH3tv/iIJHq9NK1Pu9RhVw=; b=hT/mZ7OzLPQbmdErf0YyH9TP2SSFotGKUta1skS+WwHKJH54t80iHJ/5CIjOaPsMzkGPIj vhy8hvPIYy0xAYIq++akqko1/OWck8FOtqpJxv2hFAoZrvtjqbUISKm7uA2nHniXN1MD99 dOhpJuAKqjl8S9ZakojicVruRzu224c= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-586-HTql3_eMNfWO4ctyV44IoQ-1; Tue, 17 Jun 2025 11:43:55 -0400 X-MC-Unique: HTql3_eMNfWO4ctyV44IoQ-1 X-Mimecast-MFC-AGG-ID: HTql3_eMNfWO4ctyV44IoQ_1750175034 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-3a5281ba3a4so1932862f8f.0 for ; Tue, 17 Jun 2025 08:43:55 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750175034; x=1750779834; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VIojkghjiOfK3qS9mo4araH3tv/iIJHq9NK1Pu9RhVw=; b=potwlp6A3pvSWdkUcyz/Nh2Jxw8PVJybawMMgEav1sInf7gqD5ZquT0vlJNRs4XPFj 15EtBaTAVBwNMJj8qu1AOhpxVTuUgfXY4BvmiJ6bezqSumNsasXpUOOowfUuWnseqQcg wUT+ONzHZ0INnT1n9M9O/515yu3BinQi07rI/75zejRYItgfjJep/XSHevKhOARifxVT TFJmibWgXiWjUFFt1hiKYtXhQ0H0eGDjuO98+HDkJ0cvbub56DQcoM3ufYBn9wPSwXFw pIXPZgSUqPcMxW42L4ogtwQ0jDlanDW7r+9lm7qXu5HonBKgA+kmUrQClLEqAog9gNzO 80tA== X-Forwarded-Encrypted: i=1; AJvYcCUbuO8JPMUjEDhaSPqymSKtksDDVAKdZn3vxOnuQySUuCYa3Nh5XN+zlWZc2OwJNpmQlaZkNCRLcQ==@kvack.org X-Gm-Message-State: AOJu0YxJaV3iSEP/14xV8bGJWsTTaFD/+oJEVIDQhm6BGhfJ3suJoc1/ yErs6JCeXnoTRH10fwkh4aMWYJX0jtkukGRALw7lBOb81UXebVUD+9XWv12MWAUt8mU5hCXn01q 93j6DFcOX+vm+pQ2PVNEIQXPerRn95cn4UE4KTAOy7efIWLURUBjC X-Gm-Gg: ASbGnctCXhydsepTAVFQvbeAErTp6wtcp7RrbV4JpWWlrnvBe4RiAEzYW+pAs0wuwoH HAY1w2zCtyw19hlMiRFP7S0YkB6efqykoVXkWuhHKWQ20sb4dXlvgrwdyEx6wn9I+MjRMo0/4NO vr0KTvtMdeZhQVs5PMaO2OfbBmJ7him+QdAR4IaRV2NIwGGiFcMz6B74+Q7UXi+voixarLh5GFk QqbGqOComa1gVuS4BB+ilDZCMQLQPt/yx2QJps3qlEmNOzdgEfNZHZvircgycUiMulsvnnHRRJV zol9deqrTbqUdjPzbUi2//GFk5urEzG9Gl9R0aoyqpwXnXsn+VSMBbBQE52ZCbu9My/9h1wzoqo WmEYBbQ== X-Received: by 2002:a05:6000:178e:b0:3a4:c909:ce16 with SMTP id ffacd0b85a97d-3a572e92862mr10792687f8f.49.1750175034342; Tue, 17 Jun 2025 08:43:54 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEuUUJS22/cv8lxbktZwrzLsxc7yFEH6CvMGkxQ5Sx5aQp7V5zrRMyeFF5jQJ+MyIsqVh3uOw== X-Received: by 2002:a05:6000:178e:b0:3a4:c909:ce16 with SMTP id ffacd0b85a97d-3a572e92862mr10792665f8f.49.1750175033907; Tue, 17 Jun 2025 08:43:53 -0700 (PDT) Received: from localhost (p200300d82f3107003851c66ab6b93490.dip0.t-ipconnect.de. [2003:d8:2f31:700:3851:c66a:b6b9:3490]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3a568a543d9sm14118342f8f.5.2025.06.17.08.43.52 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 17 Jun 2025 08:43:53 -0700 (PDT) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, nvdimm@lists.linux.dev, David Hildenbrand , Andrew Morton , Juergen Gross , Stefano Stabellini , Oleksandr Tyshchenko , Dan Williams , Alistair Popple , Matthew Wilcox , Jan Kara , Alexander Viro , Christian Brauner , Zi Yan , Baolin Wang , Lorenzo Stoakes , "Liam R. Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Jann Horn , Pedro Falcato Subject: [PATCH RFC 03/14] mm: compare pfns only if the entry is present when inserting pfns/pages Date: Tue, 17 Jun 2025 17:43:34 +0200 Message-ID: <20250617154345.2494405-4-david@redhat.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250617154345.2494405-1-david@redhat.com> References: <20250617154345.2494405-1-david@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: b3t2C4SWBFVXNcUjerHTGvDRUqpYtl92Ex7uhcAf_-o_1750175034 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: B4185180002 X-Stat-Signature: 7gd86ewuesrrw1doifwag19mhm8yam1h X-Rspam-User: X-HE-Tag: 1750175038-365915 X-HE-Meta: U2FsdGVkX1/sNMxzprkISWb0+PwbuBCQNSoF2qejGnROzrez1LKx1pxcMAC4mmqArWFWcA2Od8uk5nhTALlSmi1qQDYE7JKv6Fs6fttRZ8kBzY2TbV1PU0tBr+4fof5mVMI2H5CFybLfOSUHCZTGRkBEfrE3JLiPWsgRT3sZ6voyVNkjL+XSRWgGderdE2NXqRZCsyizNHtFjjnm8mSnHIMoz5RmKYqi4gan5hzrevgEuzRSo7wU3R6RkkyRptdo+oWdpsiEEuV5cKpVNW2PwVDIzohArD/r/aWQXdIU7ZEYV2hL0rbpewW8jMf1Ol8FdYf1aPeNP/8yeJ106OvcjM+iedEs0q4QZl8/xteKoLnqprbb0mVGgg8uYYqUo64ZfHduuowQYmqvvk4qck4gYjhVWPoCZGGRrJc2npxJUAvYivAwP9F7NHqxZWqhBLiP8Gr/94CZ7P6P6PyBjF4Nh6r6Mbz/NaY/aXU6mowZhy/QZyBACAm0so7gB5OfIUubb648T7GD8H/bCwgVjOd3JQqLkdn3mOzzsmiHrTQcM0f9bfSuwOUEgCVrKg4ZcWGDXx8CBnMDKrQqxhx49Gi2dHlTHqYLUx3i1y0b3tLGNXlFMltXSlpG1gyNeLRLeePU7VSo7lpRz6okODbboUJ1Yt5SJ1b/Jn0++9aQx5NBDwzO6GK4ZzwDEhlWa+e11OfAt1glShKEdBB3I6VU7SN96j7ERbA1WbrvId4TD6xes4btgR9MzYwkoUIIZlZamy5i5damtjepjGQlYQMPJopwGoLKxXL/InyvyYG4MgZdGg9/PPr9JnkoEV1evA9nJdt8x/A4FIii2V8vfNMfh3pulHMs1oawdzyfe8vTI88hHVKhnhP+YqY7I+5oQd6epRxqzyGtzJnGn0b1yIV8TEemqerJCMbloAz2XVuATPyEGf8XDUJflgeMMgX0/VSDHc3pXwsbXZX4VvPZqrw85xP M5cm33sx 8Qnk6moAnDtEtpWVcqa72m3NARxTuM99O+RBZSYkxXX6SVhLwCrrc4aayTrwjKbAbgZXR5o5s/hKN2EnI7aEIMPzKTffclcisGAZSEgEyelKWdpNwPx6rXAbcoNuNknHBjQt+kCiT0G23Nsg= 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: Doing a pte_pfn() etc. of something that is not a present page table entry is wrong. Let's check in all relevant cases where we want to upgrade write permissions when inserting pfns/pages whether the entry is actually present. It's not expected to have caused real harm in practice, so this is more a cleanup than a fix for something that would likely trigger in some weird circumstances. At some point, we should likely unify the two pte handling paths, similar to how we did it for pmds/puds. Signed-off-by: David Hildenbrand --- mm/huge_memory.c | 4 ++-- mm/memory.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 8e0e3cfd9f223..e52360df87d15 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -1392,7 +1392,7 @@ static int insert_pmd(struct vm_area_struct *vma, unsigned long addr, const unsigned long pfn = fop.is_folio ? folio_pfn(fop.folio) : fop.pfn; - if (write) { + if (write && pmd_present(*pmd)) { if (pmd_pfn(*pmd) != pfn) { WARN_ON_ONCE(!is_huge_zero_pmd(*pmd)); return -EEXIST; @@ -1541,7 +1541,7 @@ static void insert_pud(struct vm_area_struct *vma, unsigned long addr, const unsigned long pfn = fop.is_folio ? folio_pfn(fop.folio) : fop.pfn; - if (write) { + if (write && pud_present(*pud)) { if (WARN_ON_ONCE(pud_pfn(*pud) != pfn)) return; entry = pud_mkyoung(*pud); diff --git a/mm/memory.c b/mm/memory.c index a1b5575db52ac..9a1acd057ce59 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -2137,7 +2137,7 @@ static int insert_page_into_pte_locked(struct vm_area_struct *vma, pte_t *pte, pte_t pteval = ptep_get(pte); if (!pte_none(pteval)) { - if (!mkwrite) + if (!mkwrite || !pte_present(pteval)) return -EBUSY; /* see insert_pfn(). */ @@ -2434,7 +2434,7 @@ static vm_fault_t insert_pfn(struct vm_area_struct *vma, unsigned long addr, return VM_FAULT_OOM; entry = ptep_get(pte); if (!pte_none(entry)) { - if (mkwrite) { + if (mkwrite && pte_present(entry)) { /* * For read faults on private mappings the PFN passed * in may not match the PFN we have mapped if the -- 2.49.0