]> granicus.if.org Git - strace/commitdiff
tests: enhance test coverage of printstrn and umoven
authorDmitry V. Levin <ldv@altlinux.org>
Wed, 2 Aug 2017 00:45:47 +0000 (00:45 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Wed, 2 Aug 2017 00:45:47 +0000 (00:45 +0000)
* tests/printstrn-umoven.c: New file.
* tests/printstrn-umoven-peekdata.c: Likewise.
* tests/printstrn-umoven-undumpable.c: Likewise.
* tests/printstrn-umoven-legacy.test: New test.
* tests/Makefile.am (MISC_TESTS): Add printstrn-umoven-legacy.test.
* tests/gen_tests.in (printstrn-umoven, printstrn-umoven-peekdata,
printstrn-umoven-undumpable): New entries.
* tests/pure_executables.list: Add printstrn-umoven,
printstrn-umoven-peekdata, and printstrn-umoven-undumpable.
* tests/.gitignore: Likewise.

tests/.gitignore
tests/Makefile.am
tests/gen_tests.in
tests/printstrn-umoven-legacy.test [new file with mode: 0755]
tests/printstrn-umoven-peekdata.c [new file with mode: 0644]
tests/printstrn-umoven-undumpable.c [new file with mode: 0644]
tests/printstrn-umoven.c [new file with mode: 0644]
tests/pure_executables.list

index 9a3033eef288d99ba6b10fda64e73a1fbc483d03..bdbf96429be40179031a5db0b1459cd8a8480748 100644 (file)
@@ -264,6 +264,9 @@ printpath-umovestr
 printpath-umovestr-peekdata
 printpath-umovestr-undumpable
 printstr
+printstrn-umoven
+printstrn-umoven-peekdata
+printstrn-umoven-undumpable
 prlimit64
 process_vm_readv
 process_vm_writev
index 77a96d057c3a5fd94d3d3b80eb13a7cb3814a3c6..fcc8d5d9c679bd73f0f5d7b0e3b3eb493fefcdd7 100644 (file)
@@ -259,6 +259,7 @@ MISC_TESTS = \
        options-syntax.test \
        pc.test \
        printpath-umovestr-legacy.test \
+       printstrn-umoven-legacy.test \
        qual_fault-syntax.test \
        qual_fault.test \
        qual_inject-error-signal.test \
index 79e60e2be90e5311bfc77e31129a067fd7b7821d..faf26d614bff3d53a89e850bd8d06c367a506d8d 100644 (file)
@@ -230,6 +230,9 @@ printstr    -e trace=writev
 printpath-umovestr     -a11 -e signal=none -e trace=chdir
 printpath-umovestr-peekdata    -a11 -e signal=none -e trace=chdir
 printpath-umovestr-undumpable  -a11 -e signal=none -e trace=chdir
+printstrn-umoven       -s4096 -e signal=none -e trace=add_key
+printstrn-umoven-peekdata      -e signal=none -e trace=add_key
+printstrn-umoven-undumpable    -e signal=none -e trace=add_key
 prlimit64
 process_vm_readv       -s5 -a37
 process_vm_writev      -s5 -a38
diff --git a/tests/printstrn-umoven-legacy.test b/tests/printstrn-umoven-legacy.test
new file mode 100755 (executable)
index 0000000..3b2aa26
--- /dev/null
@@ -0,0 +1,52 @@
+#!/bin/sh
+#
+# Force legacy printstrn/umoven using process_vm_readv fault injection.
+#
+# Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+# 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.
+
+. "${srcdir=.}/scno_tampering.sh"
+
+> "$LOG" || fail_ "failed to write $LOG"
+fault_args='-qq -esignal=none -etrace=process_vm_readv -efault=process_vm_readv'
+args='../printstrn-umoven-peekdata'
+
+$STRACE -o "$LOG" $fault_args $args > /dev/null || {
+       rc=$?
+       if [ $rc -eq 77 ]; then
+               skip_ "$fault_args $args exited with code 77"
+       else
+               fail_ "$fault_args $args failed with code $rc"
+       fi
+}
+
+> "$LOG" || fail_ "failed to write $LOG"
+args="-e signal=none -e trace=add_key $args skip-process_vm_readv-check"
+
+$STRACE -o /dev/null $fault_args \
+       $STRACE -o "$LOG" $args > "$EXP" ||
+       dump_log_and_fail_with "$STRACE $args failed with code $?"
+
+match_diff "$LOG" "$EXP"
diff --git a/tests/printstrn-umoven-peekdata.c b/tests/printstrn-umoven-peekdata.c
new file mode 100644 (file)
index 0000000..92a6e6a
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Test PTRACE_PEEKDATA-based printstrn/umoven.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * 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 "test_ucopy.h"
+#include <stdio.h>
+
+int
+main(int ac, char **av)
+{
+       if (ac < 2 && test_process_vm_readv())
+               error_msg_and_skip("process_vm_readv is available");
+
+       if (!test_ptrace_peekdata())
+               perror_msg_and_skip("PTRACE_PEEKDATA");
+
+       test_printstrn(DEFAULT_STRLEN);
+
+       puts("+++ exited with 0 +++");
+       return 0;
+}
diff --git a/tests/printstrn-umoven-undumpable.c b/tests/printstrn-umoven-undumpable.c
new file mode 100644 (file)
index 0000000..b23e220
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * Force legacy printpath/umovestr using PR_SET_DUMPABLE.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * 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"
+
+#ifdef HAVE_PRCTL
+# include <sys/prctl.h>
+#endif
+
+#if defined HAVE_PRCTL && defined PR_SET_DUMPABLE
+
+# include <stdio.h>
+# include <unistd.h>
+
+# include "test_ucopy.h"
+
+int
+main(void)
+{
+       if (!test_process_vm_readv())
+               perror_msg_and_skip("process_vm_readv");
+
+       /*
+        * Clearing dumpable flag disallows process_vm_readv.
+        * If the kernel does not contain commit
+        * 84d77d3f06e7e8dea057d10e8ec77ad71f721be3, then
+        * PTRACE_PEEKDATA remains allowed.
+        */
+       if (prctl(PR_SET_DUMPABLE, 0))
+               perror_msg_and_skip("PR_SET_DUMPABLE 0");
+
+       if (!test_ptrace_peekdata())
+               perror_msg_and_skip("PTRACE_PEEKDATA");
+
+       test_printstrn(DEFAULT_STRLEN);
+
+       puts("+++ exited with 0 +++");
+       return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_PRCTL && PR_SET_DUMPABLE")
+
+#endif
diff --git a/tests/printstrn-umoven.c b/tests/printstrn-umoven.c
new file mode 100644 (file)
index 0000000..d63f7c5
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Test regular printstrn/umoven.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * 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 "test_ucopy.h"
+#include <stdio.h>
+
+int
+main(void)
+{
+       if (!test_process_vm_readv())
+               perror_msg_and_skip("process_vm_readv");
+
+       test_printstrn(4096);
+
+       puts("+++ exited with 0 +++");
+       return 0;
+}
index 5b8c0d12b9183053c469376f8d1c86d19ee1ccc1..fddf69106e123d2ab1a3d596a9af5f2f9a88263c 100755 (executable)
@@ -221,6 +221,9 @@ printpath-umovestr
 printpath-umovestr-peekdata
 printpath-umovestr-undumpable
 printstr
+printstrn-umoven
+printstrn-umoven-peekdata
+printstrn-umoven-undumpable
 prlimit64
 process_vm_readv
 process_vm_writev