From: Elvira Khabirova Date: Tue, 24 Jan 2017 23:59:33 +0000 (+0300) Subject: tests: check success injection X-Git-Tag: v4.16~36 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fe871501ff0473af7f55f155314027404c2770f8;p=strace tests: check success injection * tests/fault_injection-retval.c: New file. * tests/fault_injection-retval.test: New test. * tests/.gitignore: Add fault_injection-retval. * tests/Makefile.am (check_PROGRAMS): Likewise. (MISC_TESTS): Add fault_injection-retval.test. --- diff --git a/tests/.gitignore b/tests/.gitignore index fb063d61..f5a6ae0b 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -56,6 +56,7 @@ fallocate fanotify_init fanotify_mark fault_injection +fault_injection-retval fchdir fchmod fchmodat diff --git a/tests/Makefile.am b/tests/Makefile.am index b06abb60..2c059e40 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -117,6 +117,7 @@ check_PROGRAMS = \ fanotify_init \ fanotify_mark \ fault_injection \ + fault_injection-retval \ fchdir \ fchmod \ fchmodat \ @@ -836,6 +837,7 @@ MISC_TESTS = \ detach-running.test \ detach-sleeping.test \ detach-stopped.test \ + fault_injection-retval.test \ fault_injection.test \ fault_syntax.test \ filter-unavailable.test \ diff --git a/tests/fault_injection-retval.c b/tests/fault_injection-retval.c new file mode 100644 index 00000000..ac9801eb --- /dev/null +++ b/tests/fault_injection-retval.c @@ -0,0 +1,73 @@ +/* + * Check success injection. + * + * Copyright (c) 2017 Elvira Khabirova + * 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 + +#ifdef __NR_chdir + +# include +# include +# include +# include +# include + +int +main(int argc, char *argv[]) +{ + assert(argc == 2); + + static const char dir[] = ".."; + struct stat before, after; + + if (stat(".", &before)) + perror_msg_and_fail("stat"); + + long rval = syscall(__NR_chdir, dir); + + if (stat(".", &after)) + perror_msg_and_fail("stat"); + + if (before.st_dev != after.st_dev || before.st_ino != after.st_ino) + error_msg_and_fail("syscall succeeded"); + if (atol(argv[1]) != rval) + error_msg_and_fail("expected retval %s, got retval %ld", + argv[1], rval); + + printf("chdir(\"%s\") = %ld (INJECTED)\n", dir, rval); + + puts("+++ exited with 0 +++"); + return 0; +} + +#else + +SKIP_MAIN_UNDEFINED("__NR_chdir") + +#endif diff --git a/tests/fault_injection-retval.test b/tests/fault_injection-retval.test new file mode 100755 index 00000000..19ece4d7 --- /dev/null +++ b/tests/fault_injection-retval.test @@ -0,0 +1,21 @@ +#!/bin/sh + +# Check success injection. + +. "${srcdir=.}/fault_injection.sh" + +check_injection() +{ + local syscall rval + + syscall=chdir + rval="$1"; shift + + run_strace -a12 -e$syscall -efault="$syscall:retval=$rval" "$@" \ + ./fault_injection-retval "$rval" > "$EXP" + match_diff "$LOG" "$EXP" + rm -f "$EXP" +} + +check_injection 0 +check_injection 42