[PATCH] arm64/mm: Intercept pfn changes in set_pte_at()

Will Deacon will at kernel.org
Tue Nov 22 01:57:49 PST 2022


On Tue, Nov 22, 2022 at 01:43:17PM +0530, Anshuman Khandual wrote:
> 
> 
> On 11/18/22 19:43, Will Deacon wrote:
> > On Wed, Nov 16, 2022 at 08:40:01AM +0530, Anshuman Khandual wrote:
> >> Changing pfn on a user page table mapped entry, without first going through
> >> break-before-make (BBM) procedure is unsafe. This just updates set_pte_at()
> >> to intercept such changes, via an updated pgattr_change_is_safe(). This new
> >> check happens via __check_racy_pte_update(), which has now been renamed as
> >> __check_safe_pte_update().
> >>
> >> Cc: Catalin Marinas <catalin.marinas at arm.com>
> >> Cc: Will Deacon <will at kernel.org>
> >> Cc: Mark Rutland <mark.rutland at arm.com> 
> >> Cc: Andrew Morton <akpm at linux-foundation.org> 
> >> Cc: linux-arm-kernel at lists.infradead.org
> >> Cc: linux-kernel at vger.kernel.org
> >> Signed-off-by: Anshuman Khandual <anshuman.khandual at arm.com>
> >> ---
> >> This applies on v6.1-rc4
> >>
> >>  arch/arm64/include/asm/pgtable.h | 8 ++++++--
> >>  arch/arm64/mm/mmu.c              | 8 +++++++-
> >>  2 files changed, 13 insertions(+), 3 deletions(-)
> > 
> > I remember Mark saying that BBM is sometimes violated by the core code in
> > cases where the pte isn't actually part of a live pgtable (e.g. if it's on
> > the stack or part of a newly allocated table). Won't that cause false
> > positives here?
> 
> Could you please elaborate ? If the pte is not on a live page table, then
> pte_valid() will return negative on such entries. So any update there will
> be safe. I am wondering, how this change will cause false positives which
> would not have been possible earlier.

I don't think pte_valid() will always return false for these entries.
Consider, for example, ptes which are valid but which live in a table that
is not reachable by the MMU. I think this is what Mark had in mind, but it
would be helpful if he could chime in with the specific example he ran into.

Will



More information about the linux-arm-kernel mailing list