This test cannot run in user-mode because the control bit that enables this feature is only writable at EL1.
Signed-off-by: Gabriel Brookman <[email protected]> --- tests/tcg/aarch64/Makefile.target | 2 +- tests/tcg/aarch64/mte-11.c | 46 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile.target index 6203ac9b51..141c9db9c4 100644 --- a/tests/tcg/aarch64/Makefile.target +++ b/tests/tcg/aarch64/Makefile.target @@ -64,7 +64,7 @@ AARCH64_TESTS += bti-2 # MTE Tests ifneq ($(CROSS_CC_HAS_ARMV8_MTE),) -AARCH64_TESTS += mte-1 mte-2 mte-3 mte-4 mte-5 mte-6 mte-7 mte-8 mte-9 mte-10 +AARCH64_TESTS += mte-1 mte-2 mte-3 mte-4 mte-5 mte-6 mte-7 mte-8 mte-9 mte-10 mte-11 mte-%: CFLAGS += $(CROSS_CC_HAS_ARMV8_MTE) endif diff --git a/tests/tcg/aarch64/mte-11.c b/tests/tcg/aarch64/mte-11.c new file mode 100644 index 0000000000..86f2206e41 --- /dev/null +++ b/tests/tcg/aarch64/mte-11.c @@ -0,0 +1,46 @@ +/* + * Memory tagging, canonical tag checking + * + * Copyright (c) 2021 Linaro Ltd + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "mte.h" + +void pass(int sig, siginfo_t *info, void *uc) +{ + assert(info->si_code == SEGV_MTESERR); + exit(0); +} + +int main(int ac, char **av) +{ + struct sigaction sa; + int *p0, *p1, *p2; + long excl = 1; + + /* + * NOTE FOR REVIEWERS: to run this test locally, I modified + * enable_mte to also activate canonical tagging checking by writing + * to the appropriate MTX control bits. I am not sure how to modify + * the test so that it works without that modification. Input appreciated. + */ + enable_mte(PR_MTE_TCF_SYNC); + p0 = alloc_mte_mem(sizeof(*p0)); + + /* shouldn't fault on a canonical ptr */ + *p0 = 32; + + /* decanonicalize ptr */ + p0 = (int *) (((long) p0) | (1ll << 56)); + + memset(&sa, 0, sizeof(sa)); + sa.sa_sigaction = pass; + sa.sa_flags = SA_SIGINFO; + sigaction(SIGSEGV, &sa, NULL); + + /* should fault on our modified ptr */ + *p0 = 64; + + abort(); +} -- 2.51.2
