The patch titled Subject: arm64: add support for sub-page faults user probing has been added to the -mm tree. Its filename is arm64-add-support-for-sub-page-faults-user-probing.patch This patch should soon appear at https://ozlabs.org/~akpm/mmots/broken-out/arm64-add-support-for-sub-page-faults-user-probing.patch and later at https://ozlabs.org/~akpm/mmotm/broken-out/arm64-add-support-for-sub-page-faults-user-probing.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Catalin Marinas <catalin.marinas@xxxxxxx> Subject: arm64: add support for sub-page faults user probing With MTE, even if the pte allows an access, a mismatched tag somewhere within a page can still cause a fault. Select ARCH_HAS_SUBPAGE_FAULTS if MTE is enabled and implement probe_user_writeable(). Link: https://lkml.kernel.org/r/20211124192024.2408218-3-catalin.marinas@xxxxxxx Signed-off-by: Catalin Marinas <catalin.marinas@xxxxxxx> Cc: Al Viro <viro@xxxxxxxxxxxxxxxxxx> Cc: Andreas Gruenbacher <agruenba@xxxxxxxxxx> Cc: David Sterba <dsterba@xxxxxxxx> Cc: Josef Bacik <josef@xxxxxxxxxxxxxx> Cc: Matthew Wilcox <willy@xxxxxxxxxxxxx> Cc: Will Deacon <will@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- arch/arm64/Kconfig | 1 arch/arm64/include/asm/uaccess.h | 33 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) --- a/arch/arm64/include/asm/uaccess.h~arm64-add-support-for-sub-page-faults-user-probing +++ a/arch/arm64/include/asm/uaccess.h @@ -445,4 +445,37 @@ static inline int __copy_from_user_flush } #endif +#ifdef CONFIG_ARCH_HAS_SUBPAGE_FAULTS +static inline size_t __mte_probe_user_range(const char __user *uaddr, + size_t size) +{ + const char __user *end = uaddr + size; + int err = 0; + char val; + + uaddr = PTR_ALIGN_DOWN(uaddr, MTE_GRANULE_SIZE); + while (uaddr < end) { + /* + * A read is sufficient for MTE, the caller should have probed + * for the pte write permission. + */ + __raw_get_user(val, uaddr, err); + if (err) + return end - uaddr; + uaddr += MTE_GRANULE_SIZE; + } + (void)val; + + return 0; +} + +static inline size_t probe_user_writable(const void __user *uaddr, + size_t size) +{ + if (!system_supports_mte()) + return 0; + return __mte_probe_user_range(uaddr, size); +} +#endif /* CONFIG_ARCH_HAS_SUBPAGE_FAULTS */ + #endif /* __ASM_UACCESS_H */ --- a/arch/arm64/Kconfig~arm64-add-support-for-sub-page-faults-user-probing +++ a/arch/arm64/Kconfig @@ -1777,6 +1777,7 @@ config ARM64_MTE depends on AS_HAS_LSE_ATOMICS # Required for tag checking in the uaccess routines depends on ARM64_PAN + select ARCH_HAS_SUBPAGE_FAULTS select ARCH_USES_HIGH_VMA_FLAGS help Memory Tagging (part of the ARMv8.5 Extensions) provides _ Patches currently in -mm which might be from catalin.marinas@xxxxxxx are mm-introduce-fault_in_exact_writeable-to-probe-for-sub-page-faults.patch arm64-add-support-for-sub-page-faults-user-probing.patch btrfs-avoid-live-lock-in-search_ioctl-on-hardware-with-sub-page-faults.patch