summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Syromyatnikov <evgsyr@gmail.com>2021-08-14 14:29:30 +0200
committerEugene Syromyatnikov <evgsyr@gmail.com>2021-08-19 12:37:43 +0200
commitd94f7d647de757a4ac369c8d6e5d6fb8c99fe9c8 (patch)
tree5113b19d0f9a38f5dfd104fb19dfdcd19eeaa2b6
parent75878164e3e9ee03743a7bbd8e5d1120323f9ee0 (diff)
downloadstrace-d94f7d647de757a4ac369c8d6e5d6fb8c99fe9c8.tar.gz
tests: add prctl(PR_SET_PTRACER) tests
* tests/.gitignore: Add prctl-set-ptracer-success, prctl-set-ptracer-success-Xabbrev, prctl-set-ptracer-success-Xraw, prctl-set-ptracer-success-Xverbose, prctl-set-ptracer-success--pidns-translation, prctl-set-ptracer-success-Xabbrev--pidns-translation, prctl-set-ptracer-success-Xraw--pidns-translation, and prctl-set-ptracer-success-Xverbose--pidns-translation. * tests/Makefile.am (check_PROGRAMS): Likewise. * tests/gen_tests.in (prctl-set-ptracer-success, prctl-set-ptracer-success-Xabbrev, prctl-set-ptracer-success-Xraw, prctl-set-ptracer-success-Xverbose, prctl-set-ptracer-success--pidns-translation, prctl-set-ptracer-success-Xabbrev--pidns-translation, prctl-set-ptracer-success-Xraw--pidns-translation, prctl-set-ptracer-success-Xverbose--pidns-translation): New tests. * tests/prctl-set-ptracer-success--pidns-translation.c: New file. * tests/prctl-set-ptracer-success-Xabbrev--pidns-translation.c: Likewise. * tests/prctl-set-ptracer-success-Xabbrev.c: Likewise. * tests/prctl-set-ptracer-success-Xraw--pidns-translation.c: Likewise. * tests/prctl-set-ptracer-success-Xraw.c: Likewise. * tests/prctl-set-ptracer-success-Xverbose--pidns-translation.c: Likewise. * tests/prctl-set-ptracer-success-Xverbose.c: Likewise. * tests/prctl-set-ptracer-success.c: Likewise.
-rw-r--r--tests/.gitignore8
-rw-r--r--tests/Makefile.am8
-rw-r--r--tests/gen_tests.in8
-rw-r--r--tests/prctl-set-ptracer-success--pidns-translation.c2
-rw-r--r--tests/prctl-set-ptracer-success-Xabbrev--pidns-translation.c2
-rw-r--r--tests/prctl-set-ptracer-success-Xabbrev.c2
-rw-r--r--tests/prctl-set-ptracer-success-Xraw--pidns-translation.c2
-rw-r--r--tests/prctl-set-ptracer-success-Xraw.c2
-rw-r--r--tests/prctl-set-ptracer-success-Xverbose--pidns-translation.c2
-rw-r--r--tests/prctl-set-ptracer-success-Xverbose.c2
-rw-r--r--tests/prctl-set-ptracer-success.c81
11 files changed, 119 insertions, 0 deletions
diff --git a/tests/.gitignore b/tests/.gitignore
index 38c2f8234..485e1ff6e 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -651,6 +651,14 @@ prctl-securebits-success
prctl-securebits-success-Xabbrev
prctl-securebits-success-Xraw
prctl-securebits-success-Xverbose
+prctl-set-ptracer-success
+prctl-set-ptracer-success-Xabbrev
+prctl-set-ptracer-success-Xraw
+prctl-set-ptracer-success-Xverbose
+prctl-set-ptracer-success--pidns-translation
+prctl-set-ptracer-success-Xabbrev--pidns-translation
+prctl-set-ptracer-success-Xraw--pidns-translation
+prctl-set-ptracer-success-Xverbose--pidns-translation
prctl-spec-inject
prctl-sve
prctl-syscall-user-dispatch
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 2da721420..7216b80ce 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -267,6 +267,14 @@ check_PROGRAMS = $(PURE_EXECUTABLES) \
prctl-securebits-success-Xabbrev \
prctl-securebits-success-Xraw \
prctl-securebits-success-Xverbose \
+ prctl-set-ptracer-success \
+ prctl-set-ptracer-success-Xabbrev \
+ prctl-set-ptracer-success-Xraw \
+ prctl-set-ptracer-success-Xverbose \
+ prctl-set-ptracer-success--pidns-translation \
+ prctl-set-ptracer-success-Xabbrev--pidns-translation \
+ prctl-set-ptracer-success-Xraw--pidns-translation \
+ prctl-set-ptracer-success-Xverbose--pidns-translation \
prctl-spec-inject \
prctl-tagged-addr-success \
prctl-tagged-addr-success-Xabbrev \
diff --git a/tests/gen_tests.in b/tests/gen_tests.in
index 5aaf9d21e..281720c09 100644
--- a/tests/gen_tests.in
+++ b/tests/gen_tests.in
@@ -620,6 +620,14 @@ prctl-securebits-success +prctl-success.sh PRCTL_INJECT_RETVALS="0 1 42 255 256
prctl-securebits-success-Xabbrev +prctl-success.sh PRCTL_INJECT_RETVALS="0 1 42 255 256 511" -a25 -Xabbrev
prctl-securebits-success-Xraw +prctl-success.sh PRCTL_INJECT_RETVALS="0 1 42 255 256 511" -a12 -Xraw
prctl-securebits-success-Xverbose +prctl-success.sh PRCTL_INJECT_RETVALS="0 1 42 255 256 511" -a36 -Xverbose
+prctl-set-ptracer-success +prctl-success.sh PRCTL_INJECT_RETVALS=0 -a25
+prctl-set-ptracer-success-Xabbrev +prctl-success.sh PRCTL_INJECT_RETVALS=0 -a25 -Xabbrev
+prctl-set-ptracer-success-Xraw +prctl-success.sh PRCTL_INJECT_RETVALS=0 -a20 -Xraw
+prctl-set-ptracer-success-Xverbose +prctl-success.sh PRCTL_INJECT_RETVALS=0 -a42 -Xverbose
+prctl-set-ptracer-success--pidns-translation check_scno_tampering; test_pidns -einject=prctl:when=256+:retval=0 -etrace=prctl -a31 "QUIRK:START-OF-TEST-OUTPUT:prctl(0xffffffff /* PR_??? */, 0xfffffffe, 0xfffffffd, 0xfffffffc, 0xfffffffb)"
+prctl-set-ptracer-success-Xabbrev--pidns-translation check_scno_tampering; test_pidns -einject=prctl:when=256+:retval=0 -etrace=prctl -a31 "QUIRK:START-OF-TEST-OUTPUT:prctl(0xffffffff /* PR_??? */, 0xfffffffe, 0xfffffffd, 0xfffffffc, 0xfffffffb)" -Xabbrev
+prctl-set-ptracer-success-Xraw--pidns-translation check_scno_tampering; test_pidns -einject=prctl:when=256+:retval=0 -etrace=prctl -a27 "QUIRK:START-OF-TEST-OUTPUT:prctl(0xffffffff, 0xfffffffe, 0xfffffffd, 0xfffffffc, 0xfffffffb)" -Xraw
+prctl-set-ptracer-success-Xverbose--pidns-translation check_scno_tampering; test_pidns -einject=prctl:when=256+:retval=0 -etrace=prctl -a48 "QUIRK:START-OF-TEST-OUTPUT:prctl(0xffffffff /* PR_??? */, 0xfffffffe, 0xfffffffd, 0xfffffffc, 0xfffffffb)" -Xverbose
prctl-spec-inject +prctl-success.sh PRCTL_INJECT_RETVALS="error=ENOTTY 0 1 3 8 16 32 42" -a53
prctl-sve +prctl.sh -a21
prctl-syscall-user-dispatch +prctl.sh -a68
diff --git a/tests/prctl-set-ptracer-success--pidns-translation.c b/tests/prctl-set-ptracer-success--pidns-translation.c
new file mode 100644
index 000000000..3e4012aa0
--- /dev/null
+++ b/tests/prctl-set-ptracer-success--pidns-translation.c
@@ -0,0 +1,2 @@
+#define PIDNS_TRANSLATION
+#include "prctl-set-ptracer-success.c"
diff --git a/tests/prctl-set-ptracer-success-Xabbrev--pidns-translation.c b/tests/prctl-set-ptracer-success-Xabbrev--pidns-translation.c
new file mode 100644
index 000000000..060e3e876
--- /dev/null
+++ b/tests/prctl-set-ptracer-success-Xabbrev--pidns-translation.c
@@ -0,0 +1,2 @@
+#define PIDNS_TRANSLATION
+#include "prctl-set-ptracer-success-Xabbrev.c"
diff --git a/tests/prctl-set-ptracer-success-Xabbrev.c b/tests/prctl-set-ptracer-success-Xabbrev.c
new file mode 100644
index 000000000..10f39f709
--- /dev/null
+++ b/tests/prctl-set-ptracer-success-Xabbrev.c
@@ -0,0 +1,2 @@
+#define XLAT_ABBREV 1
+#include "prctl-set-ptracer-success.c"
diff --git a/tests/prctl-set-ptracer-success-Xraw--pidns-translation.c b/tests/prctl-set-ptracer-success-Xraw--pidns-translation.c
new file mode 100644
index 000000000..1426ae7cc
--- /dev/null
+++ b/tests/prctl-set-ptracer-success-Xraw--pidns-translation.c
@@ -0,0 +1,2 @@
+#define PIDNS_TRANSLATION
+#include "prctl-set-ptracer-success-Xraw.c"
diff --git a/tests/prctl-set-ptracer-success-Xraw.c b/tests/prctl-set-ptracer-success-Xraw.c
new file mode 100644
index 000000000..d23e7726b
--- /dev/null
+++ b/tests/prctl-set-ptracer-success-Xraw.c
@@ -0,0 +1,2 @@
+#define XLAT_RAW 1
+#include "prctl-set-ptracer-success.c"
diff --git a/tests/prctl-set-ptracer-success-Xverbose--pidns-translation.c b/tests/prctl-set-ptracer-success-Xverbose--pidns-translation.c
new file mode 100644
index 000000000..fdeea2565
--- /dev/null
+++ b/tests/prctl-set-ptracer-success-Xverbose--pidns-translation.c
@@ -0,0 +1,2 @@
+#define PIDNS_TRANSLATION
+#include "prctl-set-ptracer-success-Xverbose.c"
diff --git a/tests/prctl-set-ptracer-success-Xverbose.c b/tests/prctl-set-ptracer-success-Xverbose.c
new file mode 100644
index 000000000..64dac9d9a
--- /dev/null
+++ b/tests/prctl-set-ptracer-success-Xverbose.c
@@ -0,0 +1,2 @@
+#define XLAT_VERBOSE 1
+#include "prctl-set-ptracer-success.c"
diff --git a/tests/prctl-set-ptracer-success.c b/tests/prctl-set-ptracer-success.c
new file mode 100644
index 000000000..29bad49b5
--- /dev/null
+++ b/tests/prctl-set-ptracer-success.c
@@ -0,0 +1,81 @@
+/*
+ * Check decoding of prctl PR_SET_PTRACER operation.
+ *
+ * Copyright (c) 2021 Eugene Syromyatnikov <evgsyr@gmail.com>
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "tests.h"
+#include "scno.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <linux/prctl.h>
+
+#include "pidns.h"
+
+
+int
+main(int argc, char *argv[])
+{
+ PIDNS_TEST_INIT;
+
+ long rc;
+ unsigned long num_skip = 256;
+ bool locked = false;
+
+ if (argc >= 2)
+ num_skip = strtoul(argv[1], NULL, 0);
+
+ for (size_t i = 0; i < num_skip; i++) {
+ rc = prctl_marker();
+#ifdef PIDNS_TRANSLATION
+ const char *errstr = sprintrc(rc);
+ pidns_print_leader();
+ printf("prctl(" XLAT_UNKNOWN(0xffffffff, "PR_???")
+ ", 0xfffffffe, 0xfffffffd, 0xfffffffc, 0xfffffffb) = ");
+
+ if (rc < 0) {
+ puts(errstr);
+ } else {
+ printf("%ld (INJECTED)\n", rc);
+ }
+#endif
+
+ if (rc < 0)
+ continue;
+
+ locked = true;
+ break;
+ }
+
+ rc = syscall(__NR_prctl, PR_SET_PTRACER, F8ILL_KULONG_MASK,
+ 0xdead, 0xface, 0xbeef);
+ pidns_print_leader();
+ printf("prctl(" XLAT_KNOWN(0x59616d61, "PR_SET_PTRACER")
+ ", 0) = %s%s\n", sprintrc(rc), locked ? " (INJECTED)" : "");
+
+ rc = syscall(__NR_prctl, PR_SET_PTRACER,
+ (kernel_ulong_t) 0xbadc0dedffffffffULL,
+ 0xdead, 0xface, 0xbeef);
+ pidns_print_leader();
+ printf("prctl(" XLAT_KNOWN(0x59616d61, "PR_SET_PTRACER") ", "
+ XLAT_KNOWN(-1, "PR_SET_PTRACER_ANY") ") = %s%s\n",
+ sprintrc(rc), locked ? " (INJECTED)" : "");
+
+ const int pid = getpid();
+ const char *pid_str = pidns_pid2str(PT_TGID);
+ rc = syscall(__NR_prctl, PR_SET_PTRACER, F8ILL_KULONG_MASK | pid,
+ 0xdead, 0xface, 0xbeef);
+ pidns_print_leader();
+ printf("prctl(" XLAT_KNOWN(0x59616d61, "PR_SET_PTRACER") ", %d%s)"
+ " = %s%s\n",
+ pid, pid_str, sprintrc(rc), locked ? " (INJECTED)" : "");
+
+ pidns_print_leader();
+ puts("+++ exited with 0 +++");
+ return 0;
+}