Re: [PATCH v16 6/6] arm64: expose FAR_EL1 tag bits in siginfo
From: Catalin Marinas <catalin.marinas@arm.com>
Date: 2020-11-16 19:02:07
Also in:
linux-api
On Thu, Nov 12, 2020 at 06:53:36PM -0800, Peter Collingbourne wrote:
quoted hunk ↗ jump to hunk
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@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 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel