[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 08/17] exec: Add support for TARGET_TAGGED_ADDRESSES
From: |
Peter Maydell |
Subject: |
Re: [PATCH v2 08/17] exec: Add support for TARGET_TAGGED_ADDRESSES |
Date: |
Thu, 25 Jun 2020 17:43:34 +0100 |
On Fri, 5 Jun 2020 at 05:17, Richard Henderson
<richard.henderson@linaro.org> wrote:
>
> 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 | 22 ++++++++++++++++++----
> target/arm/cpu-param.h | 3 +++
> bsd-user/main.c | 5 +++++
> linux-user/main.c | 5 +++++
> 4 files changed, 31 insertions(+), 4 deletions(-)
>
> diff --git a/include/exec/cpu_ldst.h b/include/exec/cpu_ldst.h
> index 066cf33f70..d84847dc70 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
>
> +#ifdef TARGET_TAGGED_ADDRESSES
> +extern abi_ptr untagged_addr_mask;
> +static inline abi_ptr untagged_addr(abi_ptr x)
> +{
> + return x & untagged_addr_mask;
> +}
> +#else
> +static inline abi_ptr untagged_addr(abi_ptr x) { return x; }
> +#endif
> +
> /* All direct uses of g2h and h2g need to go away for usermode softmmu. */
> -#define g2h(x) ((void *)((unsigned long)(abi_ptr)(x) + guest_base))
> +static inline void *g2h(abi_ptr x)
> +{
> + return (void *)(uintptr_t)(untagged_addr(x) + guest_base);
> +}
>
> static inline bool guest_addr_valid(abi_ptr x)
> {
> - return x <= GUEST_ADDR_MAX;
> + return untagged_addr(x) <= GUEST_ADDR_MAX;
> }
>
> -static inline int guest_range_valid(unsigned long start, unsigned long len)
> +static inline bool guest_range_valid(abi_ptr start, abi_ulong len)
More type changes...
> {
> - 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) ((uintptr_t)(x) - guest_base <= GUEST_ADDR_MAX)
otherwise
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
thanks
-- PMM
- Re: [PATCH v2 03/17] linux-user: Check for overflow in access_ok, (continued)
- [PATCH v2 02/17] linux-user: Introduce PAGE_ANON, Richard Henderson, 2020/06/05
- [PATCH v2 04/17] linux-user: Tidy VERIFY_READ/VERIFY_WRITE, Richard Henderson, 2020/06/05
- [PATCH v2 05/17] bsd-user: Tidy VERIFY_READ/VERIFY_WRITE, Richard Henderson, 2020/06/05
- [PATCH v2 06/17] linux-user: Do not use guest_addr_valid for h2g_valid, Richard Henderson, 2020/06/05
- [PATCH v2 08/17] exec: Add support for TARGET_TAGGED_ADDRESSES, Richard Henderson, 2020/06/05
- Re: [PATCH v2 08/17] exec: Add support for TARGET_TAGGED_ADDRESSES,
Peter Maydell <=
- [PATCH v2 09/17] linux-user/aarch64: Implement PR_TAGGED_ADDR_ENABLE, Richard Henderson, 2020/06/05
- [PATCH v2 07/17] linux-user: Fix guest_addr_valid vs reserved_va, Richard Henderson, 2020/06/05
- [PATCH v2 10/17] linux-user/aarch64: Implement PR_MTE_TCF and PR_MTE_TAG, Richard Henderson, 2020/06/05
- [PATCH v2 11/17] linux-user/aarch64: Implement PROT_MTE, Richard Henderson, 2020/06/05
- [PATCH v2 12/17] linux-user/aarch64: Pass syndrome to EXC_*_ABORT, Richard Henderson, 2020/06/05