support FEAT_MTE_STORE_ONLY feature
From: | Yeoreum Yun <yeoreum.yun-AT-arm.com> | |
To: | catalin.marinas-AT-arm.com, pcc-AT-google.com, will-AT-kernel.org, broonie-AT-kernel.org, anshuman.khandual-AT-arm.com, joey.gouly-AT-arm.com, maz-AT-kernel.org, oliver.upton-AT-linux.dev, frederic-AT-kernel.org, james.morse-AT-arm.com, hardevsinh.palaniya-AT-siliconsignals.io, huangxiaojia2-AT-huawei.com, mark.rutland-AT-arm.com, samuel.holland-AT-sifive.com, palmer-AT-rivosinc.com, charlie-AT-rivosinc.com, thiago.bauermann-AT-linaro.org, bgray-AT-linux.ibm.com, tglx-AT-linutronix.de, puranjay-AT-kernel.org, david-AT-redhat.com, yang-AT-os.amperecomputing.com, mbenes-AT-suse.cz, joel.granados-AT-kernel.org | |
Subject: | [PATCH v4 0/7] support FEAT_MTE_STORE_ONLY feature | |
Date: | Wed, 07 May 2025 16:46:47 +0100 | |
Message-ID: | <20250507154654.1937588-1-yeoreum.yun@arm.com> | |
Cc: | linux-arm-kernel-AT-lists.infradead.org, linux-kernel-AT-vger.kernel.org, Yeoreum Yun <yeoreum.yun-AT-arm.com> | |
Archive-link: | Article |
ARMv8.5 based processors introduce the Memory Tagging Extension (MTE) feature. MTE is built on top of the ARMv8.0 virtual address tagging TBI (Top Byte Ignore) feature and allows software to access a 4-bit allocation tag for each 16-byte granule in the physical address space. A logical tag is derived from bits 59-56 of the virtual address used for the memory access. A CPU with MTE enabled will compare the logical tag against the allocation tag and potentially raise an tag check fault on mismatch, subject to system registers configuration. Since ARMv8.9, FEAT_MTE_STORE_ONLY can be used to restrict raise of tag check fault on store operation only. For this, application can use PR_MTE_STORE_ONLY flag when it sets the MTE setting with prctl(). This feature omits tag check for fetch/read operation. So it might be used not only debugging purpose but also be used by application requiring strong memory safty in normal env. Patch Sequences ================ Patch #1 adds cpufeature FEAT_MTE_STORE_ONLY Patch #2 introduce new flag -- PR_MTE_STORE_ONLY Patch #3 support MTE_STORE_ONLY feature Patch #4 add HWCAP for MTE_STORE_ONLY Patch #5 adds mte store-only hwcap test Patch #6 preparation for adding mte store-only testcase Patch #7 adds mte store-only testcases Patch History ================ v3 to v4: - separate cpufeature and hwcap commit. - add mte store-only testcases in check_mmap_options - https://lore.kernel.org/linux-arm-kernel/aApBk8eGA2Eo57fq... v2 to v3: - rebase to 6.15-rc1 - https://lore.kernel.org/linux-arm-kernel/20250403174701.7... v1 to v2: - add doc to elf_hwcaps.rst - add MTE_STORE_ONLY hwcap test - https://lore.kernel.org/linux-arm-kernel/20250403142707.2... Note: This patch based on https://lore.kernel.org/linux-arm-kernel/20250507095757.1... Yeoreum Yun (7): arm64/cpufeature: add MTE_STORE_ONLY feature prtcl: introduce PR_MTE_STORE_ONLY arm64/kernel: support store-only mte tag check arm64/hwcaps: add MTE_STORE_ONLY hwcaps tools/kselftest: add MTE_STORE_ONLY feature hwcap test kselftest/arm64/mte: preparation for mte store only test kselftest/arm64/mte: add MTE_STORE_ONLY testcases Documentation/arch/arm64/elf_hwcaps.rst | 3 + arch/arm64/include/asm/hwcap.h | 1 + arch/arm64/include/asm/processor.h | 2 + arch/arm64/include/uapi/asm/hwcap.h | 1 + arch/arm64/kernel/cpufeature.c | 9 ++ arch/arm64/kernel/cpuinfo.c | 1 + arch/arm64/kernel/mte.c | 11 +- arch/arm64/kernel/process.c | 6 +- arch/arm64/tools/cpucaps | 1 + include/uapi/linux/prctl.h | 2 + tools/testing/selftests/arm64/abi/hwcap.c | 6 + .../selftests/arm64/mte/check_buffer_fill.c | 10 +- .../selftests/arm64/mte/check_child_memory.c | 4 +- .../arm64/mte/check_hugetlb_options.c | 6 +- .../selftests/arm64/mte/check_ksm_options.c | 2 +- .../selftests/arm64/mte/check_mmap_options.c | 116 ++++++++++++------ .../testing/selftests/arm64/mte/check_prctl.c | 25 ++-- .../arm64/mte/check_tags_inclusion.c | 8 +- .../selftests/arm64/mte/check_user_mem.c | 2 +- .../selftests/arm64/mte/mte_common_util.c | 14 ++- .../selftests/arm64/mte/mte_common_util.h | 3 +- 21 files changed, 167 insertions(+), 66 deletions(-) -- LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7}