diff options
author | Eugene Syromyatnikov <evgsyr@gmail.com> | 2021-08-14 14:29:30 +0200 |
---|---|---|
committer | Eugene Syromyatnikov <evgsyr@gmail.com> | 2021-08-19 12:37:43 +0200 |
commit | d94f7d647de757a4ac369c8d6e5d6fb8c99fe9c8 (patch) | |
tree | 5113b19d0f9a38f5dfd104fb19dfdcd19eeaa2b6 | |
parent | 75878164e3e9ee03743a7bbd8e5d1120323f9ee0 (diff) | |
download | strace-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/.gitignore | 8 | ||||
-rw-r--r-- | tests/Makefile.am | 8 | ||||
-rw-r--r-- | tests/gen_tests.in | 8 | ||||
-rw-r--r-- | tests/prctl-set-ptracer-success--pidns-translation.c | 2 | ||||
-rw-r--r-- | tests/prctl-set-ptracer-success-Xabbrev--pidns-translation.c | 2 | ||||
-rw-r--r-- | tests/prctl-set-ptracer-success-Xabbrev.c | 2 | ||||
-rw-r--r-- | tests/prctl-set-ptracer-success-Xraw--pidns-translation.c | 2 | ||||
-rw-r--r-- | tests/prctl-set-ptracer-success-Xraw.c | 2 | ||||
-rw-r--r-- | tests/prctl-set-ptracer-success-Xverbose--pidns-translation.c | 2 | ||||
-rw-r--r-- | tests/prctl-set-ptracer-success-Xverbose.c | 2 | ||||
-rw-r--r-- | tests/prctl-set-ptracer-success.c | 81 |
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; +} |