Skip to content

Commit

Permalink
tests: check decoding of SEGV_ACCERR
Browse files Browse the repository at this point in the history
* tests/segv_accerr.c: New file.
* tests/gen_tests.in (segv_accerr): New test.
* tests/Makefile.am (check_PROGRAMS): Add segv_accerr.
* tests/.gitignore: Likewise.
  • Loading branch information
ldv-alt committed Feb 4, 2022
1 parent d179de6 commit efdb7c5
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 0 deletions.
1 change: 1 addition & 0 deletions tests/.gitignore
Expand Up @@ -860,6 +860,7 @@ seccomp_get_action_avail
seccomp_get_notif_sizes
seccomp_get_notif_sizes-success
secontext.am
segv_accerr
segv_pkuerr
select
select-P
Expand Down
1 change: 1 addition & 0 deletions tests/Makefile.am
Expand Up @@ -335,6 +335,7 @@ check_PROGRAMS = $(PURE_EXECUTABLES) \
seccomp-filter-v \
seccomp-strict \
seccomp_get_notif_sizes-success \
segv_accerr \
segv_pkuerr \
select-P \
set_ptracer_any \
Expand Down
1 change: 1 addition & 0 deletions tests/gen_tests.in
Expand Up @@ -840,6 +840,7 @@ seccomp-filter-v -v -e trace=seccomp
seccomp_get_action_avail -e trace=seccomp
seccomp_get_notif_sizes -etrace=seccomp -a42
seccomp_get_notif_sizes-success -einject=seccomp:retval=42 -etrace=seccomp -a42
segv_accerr -qq --trace=none
segv_pkuerr -qq --trace=none
select -a36
select-P -a36 -e trace=select -P /dev/full 9>>/dev/full
Expand Down
54 changes: 54 additions & 0 deletions tests/segv_accerr.c
@@ -0,0 +1,54 @@
/*
* Check decoding of SEGV_ACCERR.
*
* Copyright (c) 2022 Dmitry V. Levin <ldv@strace.io>
* All rights reserved.
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/

#include "tests.h"
#include <signal.h>

#ifdef SEGV_ACCERR

# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>
# include <sys/mman.h>

static void
handler(int sig)
{
_exit(0);
}

int
main(void) {
int *p = mmap(NULL, get_page_size(), PROT_NONE,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (p == MAP_FAILED)
perror_msg_and_fail("mmap");

const struct sigaction act = {
.sa_handler = handler,
.sa_flags = SA_RESETHAND
};
if (sigaction(SIGSEGV, &act, NULL))
perror_msg_and_fail("sigaction");

printf("--- SIGSEGV {si_signo=SIGSEGV"
", si_code=SEGV_ACCERR, si_addr=%p} ---\n", p);
fflush(stdout);

if (*p)
__asm__ volatile("":::"memory");

error_msg_and_skip("PROT_NONE page is readable");
}

#else

SKIP_MAIN_UNDEFINED("SEGV_ACCERR")

#endif

0 comments on commit efdb7c5

Please sign in to comment.