From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=100.103.45.18 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1794064599; b=2MAASTWFMyv8356LykQjPh2ZpDB1dy9jhHKAWl76HZXgNLA9iJmeDMIAzxAoBa6YPtW/ SqqYw6yUPigLVfP2ZByO/P9WUF2BxysCT/VmtHAIumJdxHS4wnUuScQXLSGrdDDZss4m8 Z9wNpQ2jrfToUXPu7OJiPfmnDTKYn0iABe8aMCwf5moPdikXM9HgpQedOyNqNUx/nslCR h9vXIKPMXPSQiKjXMOTWh0TpGP4yBiitp7RFDlly0Z1Vba7ian1GElh6HOJ3EHNhCdjRN eQ9SVknm2OjHiVVbQ/kJYg/oaytmlMro4m0/bSCplBkhww4Bro+UcOZHaeyJRWSOwsw== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1794064599; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:User-Agent:X-stable:X-Patchwork-Hint: MIME-Version:Content-Transfer-Encoding; bh=QZU8wgionvwEcU71nw8hss1Qm3XDLKaB86aNDfCRCiQ=; b=QmjeMIEDaB4srFRfQpkaoCyW0xvvG5ZQOFn1AZlNAj/RkJ4oBLNna7mEiIB3lNteOMCM SHmzNvYnLLnnBqMZYXM2G8l+MGioayBVysAGJYLMRKCXEvNG/q+3chG0vDRzBoskybQes oPE28wUyo6WU6tsHfvZOGd7VC1O5SyCSNSEXL5UtHWMPX1feWQ3BHuR7O01bW3kKIkHVX vaPsYycc1pYuY/YHc4kn61AonvHxW72FnoaqmgExs6gsdbUORfqMKWNZw166V/KrWuzF3 EZGG+cHP75KzNYQkJnLzj2TsOvwXlQIvnOEafSMowWX6mI0Ri25aZEDkVpK0Lrn/wig== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass header.d=linuxfoundation.org header.i=@linuxfoundation.org header.a=rsa-sha256 header.s=korg header.b=H9PNJ9rl; arc=none smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5F061606A9D3; Sat, 7 Nov 2026 15:16:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.a=rsa-sha256 header.s=korg header.b=H9PNJ9rl Received: by smtp.kernel.org (Postfix) with ESMTPSA id EEDF51F0089F; Sat, 7 Nov 2026 15:16:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=korg; t=1794064599; bh=QZU8wgionvwEcU71nw8hss1Qm3XDLKaB86aNDfCRCiQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=H9PNJ9rlqge45DdLmEMqT3DaF2OX8/y45Q0cx0uqjAU5GjhcmtUWHI6TdGineU+/3 r4ltQyXVgd7xJ4SMHIyi7G2vhjVC58SUzB6mVUfEfVWMGkQyJti4P/b495xn7vDidi JUVBipCBODccKDKtcaNuY8rGw2OXd9JyINB2GEUY= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, "Gregory Price (Meta)" , Andrew Morton , sashiko-bot , "Lorenzo Stoakes (ARM)" , "David Hildenbrand (Arm)" , Zi Yan , "Liam R. Howlett" , Vlastimil Babka , Jann Horn , Joshua Hahn , Rakie Kim , Ying Huang , Peter Xu , Jason Gunthorpe , Sasha Levin Subject: [PATCH 7.3 0586/1257] mm/madvise: use vm_normal_folio_pmd() in cold/pageout PMD range Date: Sat, 7 Nov 2026 08:48:02 -0500 Message-ID: <20261107134955.529727492@linuxfoundation.org> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261107134939.434104957@linuxfoundation.org> References: <20261107134939.434104957@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore X-Mailing-List: stable@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 7.3-stable review patch. If anyone has any objections, please let me know. ------------------ From: Gregory Price [ Upstream commit 0bd719cb607ef14bcd554e044bbd80dd901b9996 ] mmap a VM_MIXEDMAP region whose ->huge_fault installs a PMD through vmf_insert_pfn_pmd() - mshv_vtl_low does this, and needs CAP_SYS_ADMIN to open - then: madvise(p, PMD_SIZE, MADV_PAGEOUT); With a stand-in module for the driver: BUG: unable to handle page fault for address: fffff587c0000008 RIP: 0010:madvise_cold_or_pageout_pte_range+0x410/0x9b0 walk_pgd_range+0x52b/0xaf0 __walk_page_range+0x6a/0x1d0 walk_page_range_vma_unsafe+0x8e/0x120 madvise_pageout+0xb2/0x180 madvise_vma_behavior+0x46b/0xa90 do_madvise+0x108/0x190 __x64_sys_madvise+0x26/0x30 Nothing validates the pfn on the way in: can_madv_lru_vma() rejects VM_PFNMAP, but not VM_MIXEDMAP can_fault() *pfn = vmf->pgoff & ~(mask >> PAGE_SHIFT); vmf_insert_pfn_pmd() no pfn_valid() check pmd_folio() pfn_to_page() -> unpopulated vmemmap Even with a valid pfn the path is wrong. The mapping carries no rmap, so folio_maybe_mapped_shared() sees mapcount 0, and the walker goes on to folio_deactivate(), or folio_isolate_lru() plus reclaim_pages(), against a folio this mapping does not own. Use vm_normal_folio_pmd() and skip on NULL, as the PTE half of this same walker already does with vm_normal_folio(). This also filters the huge zero PMD, so its separate check is no longer needed. Link: https://lore.kernel.org/20260926105110.2156652-3-gourry@gourry.net Fixes: 3c8e44c9b369 ("mm: mark special bits for huge pfn mappings when inject") Signed-off-by: Gregory Price (Meta) Signed-off-by: Andrew Morton Reported-by: sashiko-bot Closes: https://sashiko.dev/#/patchset/20260817220810.1175596-1-gourry%40gourry.net Reviewed-by: Lorenzo Stoakes (ARM) Acked-by: David Hildenbrand (Arm) Reviewed-by: Zi Yan Assisted-by: LLM Cc: Liam R. Howlett Cc: Vlastimil Babka Cc: Jann Horn Cc: Joshua Hahn Cc: Rakie Kim Cc: Ying Huang Cc: Peter Xu Cc: Jason Gunthorpe Cc: # v6.19+ Signed-off-by: Sasha Levin --- mm/madvise.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/mm/madvise.c b/mm/madvise.c index 73c2901b9adbf..95287c495e462 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -393,16 +393,15 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd, return 0; orig_pmd = *pmd; - if (is_huge_zero_pmd(orig_pmd)) - goto huge_unlock; - if (unlikely(!pmd_present(orig_pmd))) { VM_WARN_ON_ONCE(!pmd_is_migration_entry(orig_pmd) && !pmd_is_device_private_entry(orig_pmd)); goto huge_unlock; } - folio = pmd_folio(orig_pmd); + folio = vm_normal_folio_pmd(vma, addr, orig_pmd); + if (!folio) + goto huge_unlock; if (folio_is_zone_device(folio)) goto huge_unlock; -- 2.53.0