arm64: ptrauth: Introduce Armv8.3 pointer authentication enhancements
authorAmit Daniel Kachhap <amit.kachhap@arm.com>
Mon, 14 Sep 2020 08:36:53 +0000 (14:06 +0530)
committerWill Deacon <will@kernel.org>
Mon, 14 Sep 2020 11:07:02 +0000 (12:07 +0100)
commite16aeb072682d3dcdbdad452c974baa0d2b0c6db
tree20484ed8c1c59204ef50fb524fa206e6198e63f9
parent4ef333b2d10680b5d966a733ed7171f72164fcd5
arm64: ptrauth: Introduce Armv8.3 pointer authentication enhancements

Some Armv8.3 Pointer Authentication enhancements have been introduced
which are mandatory for Armv8.6 and optional for Armv8.3. These features
are,

* ARMv8.3-PAuth2 - An enhanced PAC generation logic is added which hardens
  finding the correct PAC value of the authenticated pointer.

* ARMv8.3-FPAC - Fault is generated now when the ptrauth authentication
  instruction fails in authenticating the PAC present in the address.
  This is different from earlier case when such failures just adds an
  error code in the top byte and waits for subsequent load/store to abort.
  The ptrauth instructions which may cause this fault are autiasp, retaa
  etc.

The above features are now represented by additional configurations
for the Address Authentication cpufeature and a new ESR exception class.

The userspace fault received in the kernel due to ARMv8.3-FPAC is treated
as Illegal instruction and hence signal SIGILL is injected with ILL_ILLOPN
as the signal code. Note that this is different from earlier ARMv8.3
ptrauth where signal SIGSEGV is issued due to Pointer authentication
failures. The in-kernel PAC fault causes kernel to crash.

Signed-off-by: Amit Daniel Kachhap <amit.kachhap@arm.com>
Reviewed-by: Dave Martin <Dave.Martin@arm.com>
Link: https://lore.kernel.org/r/20200914083656.21428-4-amit.kachhap@arm.com
Signed-off-by: Will Deacon <will@kernel.org>
arch/arm64/include/asm/esr.h
arch/arm64/include/asm/exception.h
arch/arm64/include/asm/sysreg.h
arch/arm64/kernel/entry-common.c
arch/arm64/kernel/traps.c