From: Lance Yang <lance.yang@linux.dev>
To: Zhao Gongyi <zhaogongyi@bytedance.com>
Cc: catalin.marinas@arm.com, will@kernel.org, ryan.roberts@arm.com,
dev.jain@arm.com, baolin.wang@linux.alibaba.com,
mark.rutland@arm.com, akpm@linux-foundation.org,
david@kernel.org, ljs@kernel.org, liam@infradead.org,
vbabka@kernel.org, rppt@kernel.org, surenb@google.com,
mhocko@suse.com, linux-arm-kernel@lists.infradead.org,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
stable@vger.kernel.org
Subject: Re: [PATCH] arm64/mm: restrict transparent contpte mappings to valid PTEs
Date: Wed, 14 Oct 2026 14:46:21 +0800 [thread overview]
Message-ID: <f111bec5-6148-4649-8805-79a250f6e736@linux.dev> (raw)
In-Reply-To: <516828fb-558d-4a20-9532-51f50d6ba042@bytedance.com>
On 2026/10/14 14:31, Zhao Gongyi wrote:
> On 10/13/26 11:39 PM, Lance Yang wrote:
>>>
>>> + /*
>>> + * Keep the producer-side invariant documented in pgtable.h true even
>>> + * if a direct caller passes an invalid descriptor with PTE_CONT set.
>>> + */
>>> + if (!pte_valid(pte))
>>> + return __set_ptes(mm, addr, ptep, pte_mknoncont(pte), nr);
>>
>> set_ptes() is the only in-tree caller, and it already clears PTE_CONT
>> before we get here ... no? Why not fold !pte_valid(pte) into the
>> !mm_is_user(mm) check below and return __set_ptes() directly?
>>
>> if (!mm_is_user(mm) || !pte_valid(pte))
>> return __set_ptes(mm, addr, ptep, pte, nr);
>>
>> If a direct caller does pass a !pte_valid PTE with PTE_CONT set, I'd
>> rather add a VM_WARN_ON() to catch that. Silently clearing the bit would
>> hide a caller bug :)
>>
>
> Hi Lance,
>
> Thanks for taking a look.
Cheers!
> Yes, you are right. The public set_ptes() wrapper already strips PTE_CONT
> before calling contpte_set_ptes(), so the pte_mknoncont() in the invalid
> path is unnecessary for the current in-tree path.
>
> The issue I was trying to avoid is not that the incoming pte already has
> PTE_CONT set, but that contpte_set_ptes() rebuilds the pte from pfn/prot
> and then adds PTE_CONT again based on alignment. For an invalid descriptor,
> that transparent contiguous encoding should be skipped entirely.
>
> So your suggested shape makes sense to me. I will change this to return
> through __set_ptes() directly for invalid descriptors, and add a warning
> for any unexpected direct caller that passes an invalid PTE with PTE_CONT
> set, e.g.:
>
> if (!mm_is_user(mm) || !pte_valid(pte)) {
> VM_WARN_ON_ONCE(!pte_valid(pte) && pte_cont(pte));
> return __set_ptes(mm, addr, ptep, pte, nr);
> }
>
> That keeps the fix focused on not creating new invalid contpte entries,
> while still catching a bad direct caller instead of silently sanitizing it.
Thanks for the quick fix! Nothing jumped out at me :)
With that:
Tested-by: Lance Yang <lance.yang@linux.dev>
next prev parent reply other threads:[~2026-10-14 6:46 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-13 9:36 [PATCH] arm64/mm: restrict transparent contpte mappings to valid PTEs Zhao Gongyi
2026-10-13 10:13 ` Dev Jain
2026-10-14 6:16 ` Zhao Gongyi
2026-10-13 15:39 ` Lance Yang
2026-10-14 6:31 ` Zhao Gongyi
2026-10-14 6:46 ` Lance Yang [this message]
2026-10-14 8:38 ` Baolin Wang
2026-10-14 9:24 ` Lance Yang
2026-10-14 9:35 ` Baolin Wang
2026-10-14 10:03 ` Dev Jain
2026-10-14 10:45 ` Lance Yang
2026-10-14 11:02 ` Dev Jain
2026-10-14 9:41 ` David Hildenbrand (Arm)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f111bec5-6148-4649-8805-79a250f6e736@linux.dev \
--to=lance.yang@linux.dev \
--cc=akpm@linux-foundation.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=catalin.marinas@arm.com \
--cc=david@kernel.org \
--cc=dev.jain@arm.com \
--cc=liam@infradead.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=mark.rutland@arm.com \
--cc=mhocko@suse.com \
--cc=rppt@kernel.org \
--cc=ryan.roberts@arm.com \
--cc=stable@vger.kernel.org \
--cc=surenb@google.com \
--cc=vbabka@kernel.org \
--cc=will@kernel.org \
--cc=zhaogongyi@bytedance.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.