[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 11/23] exec: Add support for TARGET_TAGGED_ADDRESSES
From: |
Richard Henderson |
Subject: |
[PATCH v4 11/23] exec: Add support for TARGET_TAGGED_ADDRESSES |
Date: |
Thu, 28 Jan 2021 12:41:29 -1000 |
The AArch64 Linux ABI has always enabled TBI, but has historically
required that pointer tags be removed before a syscall. This has
changed in the lead-up to ARMv8.5-MTE, in a way that affects the
ABI generically and not specifically to MTE.
This patch allows the target to indicate that (1) there are tags
and (2) whether or not they should be taken into account at the
syscall level.
Adjust g2h, guest_addr_valid, and guest_range_valid to ignore
pointer tags, similar to how TIF_TAGGED_ADDR alters __range_ok
in the arm64 kernel source.
The prctl syscall is not not yet updated, so this change by itself
has no visible effect.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
include/exec/cpu_ldst.h | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/include/exec/cpu_ldst.h b/include/exec/cpu_ldst.h
index e62f4fba00..1df9b93e59 100644
--- a/include/exec/cpu_ldst.h
+++ b/include/exec/cpu_ldst.h
@@ -69,17 +69,31 @@ typedef uint64_t abi_ptr;
#define TARGET_ABI_FMT_ptr "%"PRIx64
#endif
+static inline abi_ptr untagged_addr(abi_ptr x)
+{
+#ifdef TARGET_TAGGED_ADDRESSES
+ if (current_cpu) {
+ return cpu_untagged_addr(current_cpu, x);
+ }
+#endif
+ return x;
+}
+
/* All direct uses of g2h and h2g need to go away for usermode softmmu. */
-#define g2h(x) ((void *)((uintptr_t)(abi_ptr)(x) + guest_base))
+static inline void *g2h(abi_ulong x)
+{
+ return (void *)((uintptr_t)untagged_addr(x) + guest_base);
+}
static inline bool guest_addr_valid(abi_ulong x)
{
- return x <= GUEST_ADDR_MAX;
+ return untagged_addr(x) <= GUEST_ADDR_MAX;
}
static inline bool guest_range_valid(abi_ulong start, abi_ulong len)
{
- return len - 1 <= GUEST_ADDR_MAX && start <= GUEST_ADDR_MAX - len + 1;
+ return len - 1 <= GUEST_ADDR_MAX &&
+ untagged_addr(start) <= GUEST_ADDR_MAX - len + 1;
}
#define h2g_valid(x) \
--
2.25.1
- [PATCH v4 00/23] target-arm: Implement ARMv8.5-MemTag, user mode, Richard Henderson, 2021/01/28
- [PATCH v4 01/23] tcg: Introduce target-specific page data for user-only, Richard Henderson, 2021/01/28
- [PATCH v4 03/23] exec: Use uintptr_t for guest_base, Richard Henderson, 2021/01/28
- [PATCH v4 04/23] exec: Use uintptr_t in cpu_ldst.h, Richard Henderson, 2021/01/28
- [PATCH v4 02/23] linux-user: Introduce PAGE_ANON, Richard Henderson, 2021/01/28
- [PATCH v4 07/23] linux-user: Tidy VERIFY_READ/VERIFY_WRITE, Richard Henderson, 2021/01/28
- [PATCH v4 05/23] exec: Improve types for guest_addr_valid, Richard Henderson, 2021/01/28
- [PATCH v4 06/23] linux-user: Check for overflow in access_ok, Richard Henderson, 2021/01/28
- [PATCH v4 09/23] linux-user: Do not use guest_addr_valid for h2g_valid, Richard Henderson, 2021/01/28
- [PATCH v4 08/23] bsd-user: Tidy VERIFY_READ/VERIFY_WRITE, Richard Henderson, 2021/01/28
- [PATCH v4 11/23] exec: Add support for TARGET_TAGGED_ADDRESSES,
Richard Henderson <=
- [PATCH v4 12/23] linux-user/aarch64: Implement PR_TAGGED_ADDR_ENABLE, Richard Henderson, 2021/01/28
- [PATCH v4 13/23] target/arm: Improve gen_top_byte_ignore, Richard Henderson, 2021/01/28
- [PATCH v4 10/23] linux-user: Fix guest_addr_valid vs reserved_va, Richard Henderson, 2021/01/28
- [PATCH v4 14/23] target/arm: Use the proper TBI settings for linux-user, Richard Henderson, 2021/01/28
- [PATCH v4 16/23] linux-user/aarch64: Implement PROT_MTE, Richard Henderson, 2021/01/28
- [PATCH v4 18/23] linux-user/aarch64: Pass syndrome to EXC_*_ABORT, Richard Henderson, 2021/01/28
- [PATCH v4 21/23] target/arm: Add allocation tag storage for user mode, Richard Henderson, 2021/01/28
- [PATCH v4 15/23] linux-user/aarch64: Implement PR_MTE_TCF and PR_MTE_TAG, Richard Henderson, 2021/01/28
- [PATCH v4 19/23] linux-user/aarch64: Signal SEGV_MTESERR for sync tag check fault, Richard Henderson, 2021/01/28
- [PATCH v4 20/23] linux-user/aarch64: Signal SEGV_MTEAERR for async tag check error, Richard Henderson, 2021/01/28