tests: enhance test coverage of printpath and umovestr
* tests/init.sh (TIMEOUT_DURATION): Raise from 300 to 600. * tests/printpath-umovestr.c: New file. * tests/printpath-umovestr-peekdata.c: Likewise. * tests/printpath-umovestr-undumpable.c: Likewise. * tests/printpath-umovestr-legacy.test: New test. * tests/Makefile.am (MISC_TESTS): Add printpath-umovestr-legacy.test. * tests/gen_tests.in (printpath-umovestr, printpath-umovestr-peekdata, printpath-umovestr-undumpable): New entries. * tests/pure_executables.list: Add printpath-umovestr, printpath-umovestr-peekdata, and printpath-umovestr-undumpable. * tests/.gitignore: Likewise.
This commit is contained in:
parent
7a9eea94ee
commit
336691583e
3
tests/.gitignore
vendored
3
tests/.gitignore
vendored
@ -260,6 +260,9 @@ preadv
|
||||
preadv-pwritev
|
||||
preadv2-pwritev2
|
||||
print_maxfd
|
||||
printpath-umovestr
|
||||
printpath-umovestr-peekdata
|
||||
printpath-umovestr-undumpable
|
||||
printstr
|
||||
prlimit64
|
||||
process_vm_readv
|
||||
|
@ -257,6 +257,7 @@ MISC_TESTS = \
|
||||
opipe.test \
|
||||
options-syntax.test \
|
||||
pc.test \
|
||||
printpath-umovestr-legacy.test \
|
||||
qual_fault-syntax.test \
|
||||
qual_fault.test \
|
||||
qual_inject-error-signal.test \
|
||||
|
@ -227,6 +227,9 @@ preadv -a21
|
||||
preadv-pwritev -a19 -eread=0 -ewrite=1 -e trace=preadv,pwritev
|
||||
preadv2-pwritev2 -a22 -eread=0 -ewrite=1 -e trace=preadv2,pwritev2
|
||||
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
|
||||
prlimit64
|
||||
process_vm_readv -s5 -a37
|
||||
process_vm_writev -s5 -a38
|
||||
|
@ -368,7 +368,7 @@ else
|
||||
STRACE=../strace
|
||||
fi
|
||||
|
||||
: "${TIMEOUT_DURATION:=300}"
|
||||
: "${TIMEOUT_DURATION:=600}"
|
||||
: "${SLEEP_A_BIT:=sleep 1}"
|
||||
|
||||
[ -z "${VERBOSE-}" ] ||
|
||||
|
52
tests/printpath-umovestr-legacy.test
Executable file
52
tests/printpath-umovestr-legacy.test
Executable file
@ -0,0 +1,52 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Force legacy printpath/umovestr 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='../printpath-umovestr-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="-a11 -e signal=none -e trace=chdir $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"
|
47
tests/printpath-umovestr-peekdata.c
Normal file
47
tests/printpath-umovestr-peekdata.c
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Test PTRACE_PEEKDATA-based printpath/umovestr.
|
||||
*
|
||||
* 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_printpath(sizeof(long) * 4);
|
||||
|
||||
puts("+++ exited with 0 +++");
|
||||
return 0;
|
||||
}
|
71
tests/printpath-umovestr-undumpable.c
Normal file
71
tests/printpath-umovestr-undumpable.c
Normal file
@ -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_printpath(sizeof(long) * 4);
|
||||
|
||||
puts("+++ exited with 0 +++");
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
SKIP_MAIN_UNDEFINED("HAVE_PRCTL && PR_SET_DUMPABLE")
|
||||
|
||||
#endif
|
45
tests/printpath-umovestr.c
Normal file
45
tests/printpath-umovestr.c
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Test regular printpath/umovestr.
|
||||
*
|
||||
* 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>
|
||||
#include <sys/param.h>
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
if (!test_process_vm_readv())
|
||||
perror_msg_and_skip("process_vm_readv");
|
||||
|
||||
test_printpath(PATH_MAX);
|
||||
|
||||
puts("+++ exited with 0 +++");
|
||||
return 0;
|
||||
}
|
@ -217,6 +217,9 @@ pread64-pwrite64
|
||||
preadv
|
||||
preadv-pwritev
|
||||
preadv2-pwritev2
|
||||
printpath-umovestr
|
||||
printpath-umovestr-peekdata
|
||||
printpath-umovestr-undumpable
|
||||
printstr
|
||||
prlimit64
|
||||
process_vm_readv
|
||||
|
Loading…
Reference in New Issue
Block a user