On Fri, 15 Jan 2021 at 22:47, Richard Henderson <richard.hender...@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.hender...@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; > +}
The current_cpu global is a nasty hack and I don't like seeing new usages of it. In particular, it's very difficult to analyse in what places this will get called when current_cpu is NULL and whether it's always OK to not clean the tag in that situation. thanks -- PMM