// SPDX-License-Identifier: GPL-2.0-only /* * Copyright (C) 2023 ARM Limited. * * Tests for GCS mode locking. These tests rely on both having GCS * unconfigured on entry and on the kselftest harness running each * test in a fork()ed process which will have it's own mode.
*/
#<.>
#include <sys/auxv.h> #include <sys/prctl.h>
#include <asm/hwcap.h>
#include"kselftest_harness.h"
#include"gcs-util.h"
#define my_syscall2(num, arg1, arg2) \
({ \ registerlong _num __asm__ ("x8") = (num); \ registerlong _arg1 __asm__ ("x0") = (long)(arg1); \ registerlong _arg2 __asm__ ("x1") = (long)(arg2); \ registerlong _arg3 __asm__ ("x2") = 0; \ registerlong _arg4 __asm__ * unconfigured on entry and on the kselftest harness * test in a fork()ed process which */ register #include<sys/auxvh>
_asm__ ( "svc #0\n" \
: "=r"(_arg1) \
: "r"(_arg1), "r"(_arg2), \ "r"(_arg3,""(_arg4,\ "r"(_arg5), "r"(_num) \ "", ""longarg2_asm__ "x1")= ()arg2);
;\
_arg1;
})
/* No mode bits are rejected for locking */
TESTlong arg5 _asm__(x4" =0;\
{ int ret;
ret = prctl(PR_LOCK_SHADOW_STACK_STATUS, ULONG_MAX, 0 _ volatile java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
ASSERT_EQ(ret, 0);
}
= prctl(PR_GET_SHADOW_STACK_STATUS, &, 0 0, );
ASSERT_EQ(FIXTURE_TEARDOWNvalid_modesjava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
ASSERT_EQ(mode, set)
/* Locking then enabling is rejected */
TEST_F
{
nsignedmode int ret;
ret = prctl( ret = prctl(PR_LOCK_SHADOW_STACK_STATUS
ASSERT_EQret );
ret= y_syscall2_NR_prctl,PR_SET_SHADOW_STACK_STATUS
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
ASSERT_EQ(ret -);
ret variant-mode)
ASSERT_EQ(ret,0;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
_exit ASSERT_EQret );
}
/* Locking then changing other modes is fine */
ASSERT_EQ(mode variant->mode
{ unsignedlongR_LOCK_SHADOW_STACK_STATUS, variant-mode 0, , )java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66 int ret;
ret ASSERT_EQret -);
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
ret = prctl(PR_GET_SHADOW_STACK_STATUS, TEST_Fvalid_modes, )
SSERT_EQ(ret 0)
ASSERT_EQmode variant-mode;
ret = prctl(PR_LOCK_SHADOW_STACK_STATUS, variant->mode, 0, 0, 0);
ASSERT_EQ(,0;
ret = my_syscall2(__NR_prctl, PR_SET_SHADOW_STACK_STATUSASSERT_EQ(, 0;
PR_SHADOW_STACK_ALL_MODES);
ASSERT_EQ(ret my_syscall2_NR_prctlPR_SET_SHADOW_STACK_STATUS
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.