linux/tools/testing/selftests/arm64/pauth/helper.c
Boyan Karatotev 766d95b1ed kselftests/arm64: add nop checks for PAuth tests
PAuth adds sign/verify controls to enable and disable groups of
instructions in hardware for compatibility with libraries that do not
implement PAuth. The kernel always enables them if it detects PAuth.

Add a test that checks that each group of instructions is enabled, if the
kernel reports PAuth as detected.

Note: For groups, for the purpose of this patch, we intend instructions
that use a certain key.

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-3-boian4o1@gmail.com
Signed-off-by: Will Deacon <will@kernel.org>
2020-09-18 14:07:20 +01:00

40 lines
660 B
C

// SPDX-License-Identifier: GPL-2.0
// Copyright (C) 2020 ARM Limited
#include "helper.h"
size_t keyia_sign(size_t ptr)
{
asm volatile("paciza %0" : "+r" (ptr));
return ptr;
}
size_t keyib_sign(size_t ptr)
{
asm volatile("pacizb %0" : "+r" (ptr));
return ptr;
}
size_t keyda_sign(size_t ptr)
{
asm volatile("pacdza %0" : "+r" (ptr));
return ptr;
}
size_t keydb_sign(size_t ptr)
{
asm volatile("pacdzb %0" : "+r" (ptr));
return ptr;
}
size_t keyg_sign(size_t ptr)
{
/* output is encoded in the upper 32 bits */
size_t dest = 0;
size_t modifier = 0;
asm volatile("pacga %0, %1, %2" : "=r" (dest) : "r" (ptr), "r" (modifier));
return dest;
}