[PATCH v16 6/6] arm64: expose FAR_EL1 tag bits in siginfo

Catalin Marinas catalin.marinas at arm.com
Mon Nov 16 14:01:18 EST 2020


On Thu, Nov 12, 2020 at 06:53:36PM -0800, Peter Collingbourne wrote:
> diff --git a/Documentation/arm64/tagged-pointers.rst b/Documentation/arm64/tagged-pointers.rst
> index eab4323609b9..19d284b70384 100644
> --- a/Documentation/arm64/tagged-pointers.rst
> +++ b/Documentation/arm64/tagged-pointers.rst
> @@ -53,12 +53,25 @@ visibility.
>  Preserving tags
>  ---------------
>  
> -Non-zero tags are not preserved when delivering signals. This means that
> -signal handlers in applications making use of tags cannot rely on the
> -tag information for user virtual addresses being maintained for fields
> -inside siginfo_t. One exception to this rule is for signals raised in
> -response to watchpoint debug exceptions, where the tag information will
> -be preserved.
> +When delivering signals, non-zero tags are not preserved in
> +siginfo.si_addr unless the flag SA_EXPOSE_TAGBITS was set in
> +sigaction.sa_flags when the signal handler was installed. This means
> +that signal handlers in applications making use of tags cannot rely
> +on the tag information for user virtual addresses being maintained
> +in these fields unless the flag was set.
> +
> +Due to architecture limitations, bits 63:60 of the fault address
> +are not preserved in response to synchronous tag check faults
> +(SEGV_MTESERR) even if SA_EXPOSE_TAGBITS was set. Applications should
> +treat the values of these bits as undefined in order to accommodate
> +future architecture revisions which may preserve the bits.

If future architecture versions will preserve these bits, most likely
we'll add a new HWCAP bit so that the user knows what's going on. But
the user shouldn't rely on them being 0, just in case.

> +For signals raised in response to watchpoint debug exceptions, the
> +tag information will be preserved regardless of the SA_EXPOSE_TAGBITS
> +flag setting.
> +
> +Non-zero tags are never preserved in sigcontext.fault_address
> +regardless of the SA_EXPOSE_TAGBITS flag setting.

We could've done it the other way around (fault_address tagged, si_addr
untagged) but that would be specific to arm64, so I think we should
solve it for other architectures that implement (or plan to) tagging.
The fault_address in the arm64 sigcontext was an oversight, we should
have removed it but when we realised it was already ABI.

Anyway, I'm fine with the arm64 changes here:

Reviewed-by: Catalin Marinas <catalin.marinas at arm.com>

With Eric's ack, I'm happy to take the series through the arm64 tree,
otherwise Eric's tree is fine as well.

Thanks.

-- 
Catalin



More information about the linux-arm-kernel mailing list