Commit 92af2b69 authored by Vincenzo Frascino's avatar Vincenzo Frascino Committed by Will Deacon

arm64: Relax Documentation/arm64/tagged-pointers.rst

On AArch64 the TCR_EL1.TBI0 bit is set by default, allowing userspace
(EL0) to perform memory accesses through 64-bit pointers with a non-zero
top byte. However, such pointers were not allowed at the user-kernel
syscall ABI boundary.

With the Tagged Address ABI patchset, it is now possible to pass tagged
pointers to the syscalls. Relax the requirements described in
tagged-pointers.rst to be compliant with the behaviours guaranteed by
the AArch64 Tagged Address ABI.

Cc: Will Deacon <will.deacon@arm.com>
Cc: Szabolcs Nagy <szabolcs.nagy@arm.com>
Cc: Kevin Brodsky <kevin.brodsky@arm.com>
Acked-by: default avatarAndrey Konovalov <andreyknvl@google.com>
Signed-off-by: default avatarVincenzo Frascino <vincenzo.frascino@arm.com>
Co-developed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Signed-off-by: default avatarWill Deacon <will@kernel.org>
parent 1243cb6a
...@@ -20,7 +20,9 @@ Passing tagged addresses to the kernel ...@@ -20,7 +20,9 @@ Passing tagged addresses to the kernel
-------------------------------------- --------------------------------------
All interpretation of userspace memory addresses by the kernel assumes All interpretation of userspace memory addresses by the kernel assumes
an address tag of 0x00. an address tag of 0x00, unless the application enables the AArch64
Tagged Address ABI explicitly
(Documentation/arm64/tagged-address-abi.rst).
This includes, but is not limited to, addresses found in: This includes, but is not limited to, addresses found in:
...@@ -33,13 +35,15 @@ This includes, but is not limited to, addresses found in: ...@@ -33,13 +35,15 @@ This includes, but is not limited to, addresses found in:
- the frame pointer (x29) and frame records, e.g. when interpreting - the frame pointer (x29) and frame records, e.g. when interpreting
them to generate a backtrace or call graph. them to generate a backtrace or call graph.
Using non-zero address tags in any of these locations may result in an Using non-zero address tags in any of these locations when the
error code being returned, a (fatal) signal being raised, or other modes userspace application did not enable the AArch64 Tagged Address ABI may
of failure. result in an error code being returned, a (fatal) signal being raised,
or other modes of failure.
For these reasons, passing non-zero address tags to the kernel via For these reasons, when the AArch64 Tagged Address ABI is disabled,
system calls is forbidden, and using a non-zero address tag for sp is passing non-zero address tags to the kernel via system calls is
strongly discouraged. forbidden, and using a non-zero address tag for sp is strongly
discouraged.
Programs maintaining a frame pointer and frame records that use non-zero Programs maintaining a frame pointer and frame records that use non-zero
address tags may suffer impaired or inaccurate debug and profiling address tags may suffer impaired or inaccurate debug and profiling
...@@ -59,6 +63,9 @@ be preserved. ...@@ -59,6 +63,9 @@ be preserved.
The architecture prevents the use of a tagged PC, so the upper byte will The architecture prevents the use of a tagged PC, so the upper byte will
be set to a sign-extension of bit 55 on exception return. be set to a sign-extension of bit 55 on exception return.
This behaviour is maintained when the AArch64 Tagged Address ABI is
enabled.
Other considerations Other considerations
-------------------- --------------------
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment