mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 09:04:39 +02:00
selftests/x86: Update the negative vsyscall tests to expect a #GP
Some of the vsyscall selftests expect a #PF when vsyscalls are disabled. However, with LASS enabled, an invalid access results in a SIGSEGV due to a #GP instead of a #PF. One such negative test fails because it is expecting X86_PF_INSTR to be set. Update the failing test to expect either a #GP or a #PF. Also, update the printed messages to show the trap number (denoting the type of fault) instead of assuming a #PF. Signed-off-by: Sohil Mehta <sohil.mehta@intel.com> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com> Reviewed-by: Dave Hansen <dave.hansen@linux.intel.com> Link: https://patch.msgid.link/20251118182911.2983253-8-sohil.mehta%40intel.com
This commit is contained in:
parent
42fea0a3a7
commit
c9129cf0f0
|
|
@ -308,12 +308,13 @@ static void test_getcpu(int cpu)
|
|||
#ifdef __x86_64__
|
||||
|
||||
static jmp_buf jmpbuf;
|
||||
static volatile unsigned long segv_err;
|
||||
static volatile unsigned long segv_err, segv_trapno;
|
||||
|
||||
static void sigsegv(int sig, siginfo_t *info, void *ctx_void)
|
||||
{
|
||||
ucontext_t *ctx = (ucontext_t *)ctx_void;
|
||||
|
||||
segv_trapno = ctx->uc_mcontext.gregs[REG_TRAPNO];
|
||||
segv_err = ctx->uc_mcontext.gregs[REG_ERR];
|
||||
siglongjmp(jmpbuf, 1);
|
||||
}
|
||||
|
|
@ -336,7 +337,8 @@ static void test_vsys_r(void)
|
|||
else if (can_read)
|
||||
ksft_test_result_pass("We have read access\n");
|
||||
else
|
||||
ksft_test_result_pass("We do not have read access: #PF(0x%lx)\n", segv_err);
|
||||
ksft_test_result_pass("We do not have read access (trap=%ld, error=0x%lx)\n",
|
||||
segv_trapno, segv_err);
|
||||
}
|
||||
|
||||
static void test_vsys_x(void)
|
||||
|
|
@ -347,7 +349,7 @@ static void test_vsys_x(void)
|
|||
return;
|
||||
}
|
||||
|
||||
ksft_print_msg("Make sure that vsyscalls really page fault\n");
|
||||
ksft_print_msg("Make sure that vsyscalls really cause a fault\n");
|
||||
|
||||
bool can_exec;
|
||||
if (sigsetjmp(jmpbuf, 1) == 0) {
|
||||
|
|
@ -358,13 +360,14 @@ static void test_vsys_x(void)
|
|||
}
|
||||
|
||||
if (can_exec)
|
||||
ksft_test_result_fail("Executing the vsyscall did not page fault\n");
|
||||
else if (segv_err & (1 << 4)) /* INSTR */
|
||||
ksft_test_result_pass("Executing the vsyscall page failed: #PF(0x%lx)\n",
|
||||
segv_err);
|
||||
ksft_test_result_fail("Executing the vsyscall did not fault\n");
|
||||
/* #GP or #PF (with X86_PF_INSTR) */
|
||||
else if ((segv_trapno == 13) || ((segv_trapno == 14) && (segv_err & (1 << 4))))
|
||||
ksft_test_result_pass("Executing the vsyscall page failed (trap=%ld, error=0x%lx)\n",
|
||||
segv_trapno, segv_err);
|
||||
else
|
||||
ksft_test_result_fail("Execution failed with the wrong error: #PF(0x%lx)\n",
|
||||
segv_err);
|
||||
ksft_test_result_fail("Execution failed with the wrong error (trap=%ld, error=0x%lx)\n",
|
||||
segv_trapno, segv_err);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user