prctl.2: Add PR_PAC_RESET_KEYS (arm64)

Add documentation for the PR_PAC_RESET_KEYS ioctl added in Linux
5.0 for arm64.

Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Amit Daniel Kachhap <amit.kachhap@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
This commit is contained in:
Dave Martin 2020-06-09 13:30:57 +02:00 committed by Michael Kerrisk
parent c3a523e07d
commit 8165500d4c
1 changed files with 79 additions and 0 deletions

View File

@ -952,6 +952,77 @@ behavior.
A value of 1 indicates
.BR execve (2)
will operate in the privilege-restricting mode described above.
.\" prctl PR_PAC_RESET_KEYS
.\" commit ba830885656414101b2f8ca88786524d4bb5e8c1
.TP
.BR PR_PAC_RESET_KEYS " (since Linux 5.0, only on arm64)"
Securely reset the thread's pointer authentication keys
to fresh random values generated by the kernel.
.IP
The set of keys to be reset is specified by
.IR arg2 ,
which must be a logical OR of zero or more of the following:
.RS
.TP
.B PR_PAC_APIAKEY
instruction authentication key A
.TP
.B PR_PAC_APIBKEY
instruction authentication key B
.TP
.B PR_PAC_APDAKEY
data authentication key A
.TP
.B PR_PAC_APDBKEY
data authentication key B
.TP
.B PR_PAC_APGAKEY
generic authentication \(lqA\(rq key.
.IP
(Yes folks, there really is no generic B key.)
.RE
.IP
As a special case, if
.I arg2
is zero then all the keys are reset.
Since new keys could be added in future,
this is the recommended way to completely wipe the existing keys
when establishing a clean execution context.
Note that there is no need to use
.BR PR_PAC_RESET_KEYS
in preparation for calling
.BR execve (2),
since
.BR execve (2)
resets all the pointer authentication keys.
.IP
The remaining arguments
.IR arg3 ", " arg4 " and " arg5
must all be zero.
.IP
If the arguments are invalid,
and in particular if
.I arg2
contains set bits that are unrecognized
or that correspond to a key not available on this platform,
the call fails with error
.BR EINVAL .
.IP
.B Warning:
Because the compiler or run-time environment
may be using some or all of the keys,
a successful
.IP
For more information, see the kernel source file
.I Documentation/arm64/pointer\-authentication.rst
.\"commit b693d0b372afb39432e1c49ad7b3454855bc6bed
(or
.I Documentation/arm64/pointer\-authentication.txt
before Linux 5.3).
.B PR_PAC_RESET_KEYS
may crash the calling process.
The conditions for using it safely are complex and system-dependent.
Don't use it unless you know what you are doing.
.\" prctl PR_SET_PDEATHSIG
.TP
.BR PR_SET_PDEATHSIG " (since Linux 2.1.57)"
@ -1825,6 +1896,14 @@ or
and unused arguments to
.BR prctl ()
are not 0.
.B EINVAL
.I option
is
.B PR_PAC_RESET_KEYS
and the arguments are invalid or unsupported.
See the description of
.B PR_PAC_RESET_KEYS
above for details.
.TP
.B ENODEV
.I option