linux/tools/testing/selftests/arm64/pauth/exec_target.c
Boyan Karatotev 806a15b254 kselftests/arm64: add PAuth test for whether exec() changes keys
Kernel documentation states that it will change PAuth keys on exec() calls.

Verify that all keys are correctly switched to new ones.

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

35 lines
768 B
C

// SPDX-License-Identifier: GPL-2.0
// Copyright (C) 2020 ARM Limited
#include <stdio.h>
#include <stdlib.h>
#include <sys/auxv.h>
#include "helper.h"
int main(void)
{
struct signatures signed_vals;
unsigned long hwcaps;
size_t val;
fread(&val, sizeof(size_t), 1, stdin);
/* don't try to execute illegal (unimplemented) instructions) caller
* should have checked this and keep worker simple
*/
hwcaps = getauxval(AT_HWCAP);
if (hwcaps & HWCAP_PACA) {
signed_vals.keyia = keyia_sign(val);
signed_vals.keyib = keyib_sign(val);
signed_vals.keyda = keyda_sign(val);
signed_vals.keydb = keydb_sign(val);
}
signed_vals.keyg = (hwcaps & HWCAP_PACG) ? keyg_sign(val) : 0;
fwrite(&signed_vals, sizeof(struct signatures), 1, stdout);
return 0;
}