[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 12/21] linux-user/aarch64: Implement PR_TAGGED_ADDR_ENABLE
From: |
Peter Maydell |
Subject: |
Re: [PATCH v3 12/21] linux-user/aarch64: Implement PR_TAGGED_ADDR_ENABLE |
Date: |
Fri, 22 Jan 2021 11:53:11 +0000 |
On Fri, 15 Jan 2021 at 22:47, Richard Henderson
<richard.henderson@linaro.org> wrote:
>
> This is the prctl bit that controls whether syscalls accept tagged
> addresses. See Documentation/arm64/tagged-address-abi.rst in the
> linux kernel.
> +#ifdef TARGET_TAGGED_ADDRESSES
> +/**
> + * cpu_untagged_addr:
> + * @cs: CPU context
> + * @x: tagged address
> + *
> + * Remove any address tag from @x. This is explicitly related to the
> + * linux syscall TIF_TAGGED_ADDR setting, not TBI in general.
> + *
> + * There should be a better place to put this, but we need this in
> + * include/exec/cpu_ldst.h, and not some place linux-user specific.
> + */
> +static inline target_ulong cpu_untagged_addr(CPUState *cs, target_ulong x)
> +{
> + ARMCPU *cpu = ARM_CPU(cs);
> + return x & cpu->env.untagged_addr_mask;
> +}
> +#endif
Forgot to mention: this only does the right thing on addresses
in the lower half of the address space. I guess that's mostly
OK for our purposes? It probably means that if a guest program
deliberately dereferences a bad address in the top half of the
address space we'll report the wrong (ie different to what a real
kernel reports) address value to it in the SEGV signal handler.
The kernel's "untagged_addr()" implementation:
https://elixir.bootlin.com/linux/latest/source/arch/arm64/include/asm/memory.h#L203
slightly confusingly does "untag the addr if it's in the userspace
half, leave the tag bits alone if in the kernel half".
thanks
-- PMM
- Re: [PATCH v3 08/21] bsd-user: Tidy VERIFY_READ/VERIFY_WRITE, (continued)
- [PATCH v3 07/21] linux-user: Tidy VERIFY_READ/VERIFY_WRITE, Richard Henderson, 2021/01/15
- [PATCH v3 09/21] linux-user: Do not use guest_addr_valid for h2g_valid, Richard Henderson, 2021/01/15
- [PATCH v3 06/21] linux-user: Check for overflow in access_ok, Richard Henderson, 2021/01/15
- [PATCH v3 11/21] exec: Add support for TARGET_TAGGED_ADDRESSES, Richard Henderson, 2021/01/15
- [PATCH v3 12/21] linux-user/aarch64: Implement PR_TAGGED_ADDR_ENABLE, Richard Henderson, 2021/01/15
- [PATCH v3 15/21] target/arm: Split out syndrome.h from internals.h, Richard Henderson, 2021/01/15
- [PATCH v3 17/21] linux-user/aarch64: Signal SEGV_MTESERR for sync tag check fault, Richard Henderson, 2021/01/15
- [PATCH v3 14/21] linux-user/aarch64: Implement PROT_MTE, Richard Henderson, 2021/01/15
- [PATCH v3 16/21] linux-user/aarch64: Pass syndrome to EXC_*_ABORT, Richard Henderson, 2021/01/15
- [PATCH v3 13/21] linux-user/aarch64: Implement PR_MTE_TCF and PR_MTE_TAG, Richard Henderson, 2021/01/15