summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@strace.io>2022-02-04 08:00:00 +0000
committerDmitry V. Levin <ldv@strace.io>2022-02-04 08:00:00 +0000
commit1ffe04ffdd23abe303609d04abff2421f18037d9 (patch)
tree57cd744f0565e2f08c2fcbe1d277b606d07758b9
parentbeed7451b02c7c63c6199ac6b027beca7eef097f (diff)
downloadstrace-1ffe04ffdd23abe303609d04abff2421f18037d9.tar.gz
tests: check decoding of SEGV_ACCERR
* 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.
-rw-r--r--tests/.gitignore1
-rw-r--r--tests/Makefile.am1
-rw-r--r--tests/gen_tests.in1
-rw-r--r--tests/segv_accerr.c53
4 files changed, 56 insertions, 0 deletions
diff --git a/tests/.gitignore b/tests/.gitignore
index a19b1b305..5a2f2649d 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -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
diff --git a/tests/Makefile.am b/tests/Makefile.am
index d0f694762..22a494539 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -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 \
diff --git a/tests/gen_tests.in b/tests/gen_tests.in
index c963c9975..c11d129af 100644
--- a/tests/gen_tests.in
+++ b/tests/gen_tests.in
@@ -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
diff --git a/tests/segv_accerr.c b/tests/segv_accerr.c
new file mode 100644
index 000000000..1b50470f2
--- /dev/null
+++ b/tests/segv_accerr.c
@@ -0,0 +1,53 @@
+/*
+ * 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);
+
+ __asm__ volatile("":: "r" (*p));
+
+ error_msg_and_skip("PROT_NONE page is readable");
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("SEGV_ACCERR")
+
+#endif