From: Eugene Syromyatnikov Date: Sat, 10 Dec 2016 04:05:10 +0000 (+0300) Subject: tests: check decoding of prctl operations without arguments X-Git-Tag: v4.16~350 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6f4ecb2add8e0c143cddece2bf20a94396e9d741;p=strace tests: check decoding of prctl operations without arguments * tests/prctl-no-args.c: New file. * tests/prctl-no-args.test: New test. * tests/.gitignore: Add prctl-no-args. * tests/Makefile.am (check_PROGRAMS): Likewise. (DECODER_TESTS): Add prctl-no-args.test. --- diff --git a/tests/.gitignore b/tests/.gitignore index fe0e0480..92b1120a 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -211,6 +211,7 @@ poll ppoll prctl-dumpable prctl-name +prctl-no-args prctl-pdeathsig prctl-seccomp-filter-v prctl-seccomp-strict diff --git a/tests/Makefile.am b/tests/Makefile.am index 65c90f09..488bfb82 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -271,6 +271,7 @@ check_PROGRAMS = \ ppoll \ prctl-dumpable \ prctl-name \ + prctl-no-args \ prctl-pdeathsig \ prctl-seccomp-filter-v \ prctl-seccomp-strict \ @@ -654,6 +655,7 @@ DECODER_TESTS = \ ppoll.test \ prctl-dumpable.test \ prctl-name.test \ + prctl-no-args.test \ prctl-pdeathsig.test \ prctl-seccomp-filter-v.test \ prctl-seccomp-strict.test \ diff --git a/tests/prctl-no-args.c b/tests/prctl-no-args.c new file mode 100644 index 00000000..57e1b733 --- /dev/null +++ b/tests/prctl-no-args.c @@ -0,0 +1,77 @@ +/* + * Check decoding of prctl operations without arguments and return code parsing: + * PR_GET_KEEPCAPS, PR_GET_SECCOMP, PR_GET_TIMERSLACK, PR_GET_TIMING, + * PR_TASK_PERF_EVENTS_DISABLE, and PR_TASK_PERF_EVENTS_ENABLE. + * + * Copyright (c) 2016 Eugene Syromyatnikov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "tests.h" +#include + +#if defined __NR_prctl + +# include +# include +# include + +int +main(void) +{ + static const kernel_ulong_t bogus_op_bits = + (kernel_ulong_t) 0xbadc0ded00000000ULL; + static const kernel_ulong_t bogus_arg = + (kernel_ulong_t) 0xfacefeeddeadbeefULL; + static const struct { + kernel_ulong_t val; + const char *str; + } options[] = { + { 7, "PR_GET_KEEPCAPS" }, + { 13, "PR_GET_TIMING" }, + { 21, "PR_GET_SECCOMP" }, + { 30, "PR_GET_TIMERSLACK" }, + { 31, "PR_TASK_PERF_EVENTS_DISABLE" }, + { 32, "PR_TASK_PERF_EVENTS_ENABLE" }, + }; + + unsigned int *ptr = tail_alloc(sizeof(*ptr)); + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(options); i++) { + long rc = syscall(__NR_prctl, options[i].val | bogus_op_bits, + bogus_arg); + printf("prctl(%s) = %s\n", options[i].str, sprintrc(rc)); + } + + puts("+++ exited with 0 +++"); + return 0; +} + +#else + +SKIP_MAIN_UNDEFINED("__NR_prctl") + +#endif diff --git a/tests/prctl-no-args.test b/tests/prctl-no-args.test new file mode 100755 index 00000000..ce8ca67b --- /dev/null +++ b/tests/prctl-no-args.test @@ -0,0 +1,14 @@ +#!/bin/sh + +# Check decoding of prctl PR_GET_KEEPCAPS, PR_GET_SECCOMP, PR_GET_TIMERSLACK, +# PR_GET_TIMING, PR_TASK_PERF_EVENTS_DISABLE, and PR_TASK_PERF_EVENTS_ENABLE +# operations. +. "${srcdir=.}/init.sh" + +check_prog grep +run_prog > /dev/null +run_strace -a21 -eprctl $args > "$EXP" +grep -v '^prctl(PR_[GS]ET_[^KST][^EI][^CEM]' < "$LOG" > "$OUT" +match_diff "$OUT" "$EXP" + +rm -f "$EXP" "$OUT"