[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v11 1/6] arm64: mte: Sync tags for pages where PTE is untagge
From: |
Catalin Marinas |
Subject: |
Re: [PATCH v11 1/6] arm64: mte: Sync tags for pages where PTE is untagged |
Date: |
Tue, 4 May 2021 16:29:40 +0100 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
On Thu, Apr 29, 2021 at 05:06:05PM +0100, Steven Price wrote:
> On 27/04/2021 18:43, Catalin Marinas wrote:
> > On Fri, Apr 16, 2021 at 04:43:04PM +0100, Steven Price wrote:
> > > diff --git a/arch/arm64/include/asm/pgtable.h
> > > b/arch/arm64/include/asm/pgtable.h
> > > index e17b96d0e4b5..cf4b52a33b3c 100644
> > > --- a/arch/arm64/include/asm/pgtable.h
> > > +++ b/arch/arm64/include/asm/pgtable.h
> > > @@ -312,7 +312,7 @@ static inline void set_pte_at(struct mm_struct *mm,
> > > unsigned long addr,
> > > __sync_icache_dcache(pte);
> > > if (system_supports_mte() &&
> > > - pte_present(pte) && pte_tagged(pte) && !pte_special(pte))
> > > + pte_present(pte) && (pte_val(pte) & PTE_USER) && !pte_special(pte))
> >
> > I would add a pte_user() macro here or, if we restore the tags only when
> > the page is readable, use pte_access_permitted(pte, false). Also add a
> > comment why we do this.
>
> pte_access_permitted() looks like it describes what we want (user space can
> access the memory). I'll add the following comment:
>
> /*
> * If the PTE would provide user space will access to the tags
I think drop "will".
> * associated with it then ensure that the MTE tags are synchronised.
> * Exec-only mappings don't expose tags (instruction fetches don't
> * check tags).
> */
Sounds fine.
> > There's also the pte_user_exec() case which may not have the PTE_USER
> > set (exec-only permission) but I don't think it matters. We don't do tag
> > checking on instruction fetches, so if the user adds a PROT_READ to it,
> > it would go through set_pte_at() again. I'm not sure KVM does anything
> > special with exec-only mappings at stage 2, I suspect they won't be
> > accessible by the guest (but needs checking).
>
> It comes down to the behaviour of get_user_pages(). AFAICT that will fail if
> the memory is exec-only, so no stage 2 mapping will be created. Which of
> course means the guest can't do anything with that memory. That certainly
> seems like the only sane behaviour even without MTE.
That's my understanding as well. The get_user_pages_fast() path uses
pte_access_permitted() and should return false. The slower
get_user_pages() relies on checking the vma flags and it checks for
VM_READ.
--
Catalin
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PATCH v11 1/6] arm64: mte: Sync tags for pages where PTE is untagged,
Catalin Marinas <=