kselftests/arm64: add a basic Pointer Authentication test
authorBoyan Karatotev <boyan.karatotev@arm.com>
Fri, 18 Sep 2020 10:47:12 +0000 (11:47 +0100)
committerWill Deacon <will@kernel.org>
Fri, 18 Sep 2020 13:07:20 +0000 (14:07 +0100)
commite74e1d55728509b352e4eec4283dd5b2781b2070
treeed513f9ab64382c5be64d0ab5ff995bb07a4b21c
parentf75aef392f869018f78cfedf3c320a6b3fcfda6b
kselftests/arm64: add a basic Pointer Authentication test

PAuth signs and verifies return addresses on the stack. It does so by
inserting a Pointer Authentication code (PAC) into some of the unused top
bits of an address. This is achieved by adding paciasp/autiasp instructions
at the beginning and end of a function.

This feature is partially backwards compatible with earlier versions of the
ARM architecture. To coerce the compiler into emitting fully backwards
compatible code the main file is compiled to target an earlier ARM version.
This allows the tests to check for the feature and print meaningful error
messages instead of crashing.

Add a test to verify that corrupting the return address results in a
SIGSEGV on return.

Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
Reviewed-by: Vincenzo Frascino <Vincenzo.Frascino@arm.com>
Reviewed-by: Amit Daniel Kachhap <amit.kachhap@arm.com>
Acked-by: Shuah Khan <skhan@linuxfoundation.org>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20200918104715.182310-2-boian4o1@gmail.com
Signed-off-by: Will Deacon <will@kernel.org>
tools/testing/selftests/arm64/Makefile
tools/testing/selftests/arm64/pauth/.gitignore [new file with mode: 0644]
tools/testing/selftests/arm64/pauth/Makefile [new file with mode: 0644]
tools/testing/selftests/arm64/pauth/helper.h [new file with mode: 0644]
tools/testing/selftests/arm64/pauth/pac.c [new file with mode: 0644]
tools/testing/selftests/arm64/pauth/pac_corruptor.S [new file with mode: 0644]