mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

Since it is not possible to return from the function that enabled GCS without disabling GCS it is very inconvenient to use the signal handling tests to cover GCS when GCS is not enabled by the toolchain and runtime, something that no current distribution does. Since none of the testcases do anything with stacks that would cause problems with GCS we can sidestep this issue by unconditionally enabling GCS on startup and exiting with a call to exit() rather than a return from main(). Reviewed-by: Thiago Jung Bauermann <thiago.bauermann@linaro.org> Signed-off-by: Mark Brown <broonie@kernel.org> Link: https://lore.kernel.org/r/20241001-arm64-gcs-v13-33-222b78d87eee@kernel.org Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
42 lines
1 KiB
C
42 lines
1 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* Copyright (C) 2019 ARM Limited
|
|
*
|
|
* Generic test wrapper for arm64 signal tests.
|
|
*
|
|
* Each test provides its own tde struct tdescr descriptor to link with
|
|
* this wrapper. Framework provides common helpers.
|
|
*/
|
|
|
|
#include <sys/auxv.h>
|
|
#include <sys/prctl.h>
|
|
|
|
#include <kselftest.h>
|
|
|
|
#include "test_signals.h"
|
|
#include "test_signals_utils.h"
|
|
|
|
struct tdescr *current = &tde;
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
/*
|
|
* Ensure GCS is at least enabled throughout the tests if
|
|
* supported, otherwise the inability to return from the
|
|
* function that enabled GCS makes it very inconvenient to set
|
|
* up test cases. The prctl() may fail if GCS was locked by
|
|
* libc setup code.
|
|
*/
|
|
if (getauxval(AT_HWCAP) & HWCAP_GCS)
|
|
gcs_set_state(PR_SHADOW_STACK_ENABLE);
|
|
|
|
ksft_print_msg("%s :: %s\n", current->name, current->descr);
|
|
if (test_setup(current) && test_init(current)) {
|
|
test_run(current);
|
|
test_cleanup(current);
|
|
}
|
|
test_result(current);
|
|
|
|
/* Do not return in case GCS was enabled */
|
|
exit(current->result);
|
|
}
|