Commit fc2d9cd3 authored by Joey Gouly's avatar Joey Gouly Committed by Will Deacon
Browse files

arm64: add pte_access_permitted_no_overlay()



We do not want take POE into account when clearing the MTE tags.

Signed-off-by: default avatarJoey Gouly <joey.gouly@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Reviewed-by: default avatarAnshuman Khandual <anshuman.khandual@arm.com>
Link: https://lore.kernel.org/r/20240822151113.1479789-18-joey.gouly@arm.com


Signed-off-by: default avatarWill Deacon <will@kernel.org>
parent 7f0ab607
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -156,8 +156,10 @@ static inline pteval_t __phys_to_pte_val(phys_addr_t phys)
 * not set) must return false. PROT_NONE mappings do not have the
 * PTE_VALID bit set.
 */
#define pte_access_permitted(pte, write) \
#define pte_access_permitted_no_overlay(pte, write) \
	(((pte_val(pte) & (PTE_VALID | PTE_USER)) == (PTE_VALID | PTE_USER)) && (!(write) || pte_write(pte)))
#define pte_access_permitted(pte, write) \
	pte_access_permitted_no_overlay(pte, write)
#define pmd_access_permitted(pmd, write) \
	(pte_access_permitted(pmd_pte(pmd), (write)))
#define pud_access_permitted(pud, write) \
@@ -373,10 +375,11 @@ static inline void __sync_cache_and_tags(pte_t pte, unsigned int nr_pages)
	/*
	 * If the PTE would provide user space access to the tags associated
	 * with it then ensure that the MTE tags are synchronised.  Although
	 * pte_access_permitted() returns false for exec only mappings, they
	 * don't expose tags (instruction fetches don't check tags).
	 * pte_access_permitted_no_overlay() returns false for exec only
	 * mappings, they don't expose tags (instruction fetches don't check
	 * tags).
	 */
	if (system_supports_mte() && pte_access_permitted(pte, false) &&
	if (system_supports_mte() && pte_access_permitted_no_overlay(pte, false) &&
	    !pte_special(pte) && pte_tagged(pte))
		mte_sync_tags(pte, nr_pages);
}