* tests/.gitignore: Add inotify, inotify_init1. * tests/Makefile.am (check_PROGRAMS): Likewise. (DECODER_TESTS): Add inotify.test, inotify_init1.test. * tests/inotify.c: New file. * tests/inotify.test: Likewise. * tests/inotify_init1.c: Likewise. * tests/inotify_init1.test: Likewise. --- tests/.gitignore | 2 + tests/Makefile.am | 4 ++ tests/inotify.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++ tests/inotify.test | 6 +++ tests/inotify_init1.c | 71 +++++++++++++++++++++++++++++++++++ tests/inotify_init1.test | 6 +++ 6 files changed, 181 insertions(+) create mode 100644 tests/inotify.c create mode 100755 tests/inotify.test create mode 100644 tests/inotify_init1.c create mode 100755 tests/inotify_init1.test
diff --git a/tests/.gitignore b/tests/.gitignore index e7b0dc6..76d49dc 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -101,6 +101,8 @@ getuid getuid32 getxxid inet-cmsg +inotify +inotify_init1 ioctl ioctl_block ioctl_dm diff --git a/tests/Makefile.am b/tests/Makefile.am index 3401b89..e9b2a13 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -161,6 +161,8 @@ check_PROGRAMS = \ getuid32 \ getxxid \ inet-cmsg \ + inotify \ + inotify_init1 \ ioctl \ ioctl_block \ ioctl_dm \ @@ -512,6 +514,8 @@ DECODER_TESTS = \ getuid32.test \ getxxid.test \ inet-cmsg.test \ + inotify.test \ + inotify_init1.test \ ioctl.test \ ioctl_block.test \ ioctl_dm.test \ diff --git a/tests/inotify.c b/tests/inotify.c new file mode 100644 index 0000000..64242db --- /dev/null +++ b/tests/inotify.c @@ -0,0 +1,92 @@ +/* + * Check decoding of inotify_add_watch, inotify_rm_watch syscalls. + * + * Copyright (c) 2016 Eugene Syromyatnikov <evg...@gmail.com> + * 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 <asm/unistd.h> + +#if defined(__NR_inotify_add_watch) && defined(__NR_inotify_rm_watch) + +# include <stdio.h> +# include <string.h> +# include <unistd.h> + +# include "kernel_types.h" + +int +main(void) +{ + static const struct { + const char *path; + const char *str; + } bogus_path_str = { + ARG_STR("/abc\1/def\2/ghi\3/jkl\4/mno\5/pqr\6/stu\7/vwx\10") }; + static const kernel_ulong_t bogus_fd = + (kernel_ulong_t) 0xfffffeedfffffaceULL; + static const kernel_ulong_t bogus_mask = + (kernel_ulong_t) 0xffffda7affffdeadULL; + static const char *bogus_mask_str = "IN_ACCESS|IN_ATTRIB|" + "IN_CLOSE_WRITE|IN_OPEN|IN_MOVED_TO|IN_DELETE|IN_DELETE_SELF|" + "IN_MOVE_SELF|IN_Q_OVERFLOW|IN_IGNORED|IN_ONLYDIR|" + "IN_DONT_FOLLOW|IN_EXCL_UNLINK|IN_MASK_ADD|IN_ISDIR|IN_ONESHOT|" + "0x18ff1000"; + + long rc; + char *bogus_path = tail_memdup(bogus_path_str.path, + strlen(bogus_path_str.path) + 1); + + rc = syscall(__NR_inotify_add_watch, 0, NULL, 0); + printf("inotify_add_watch(0, NULL, 0) = %s\n", sprintrc(rc)); + + rc = syscall(__NR_inotify_add_watch, bogus_fd, bogus_path + 4096, 0); + printf("inotify_add_watch(%d, %p, %u) = %s\n", + (int) bogus_fd, bogus_path + 4096, 0, sprintrc(rc)); + + rc = syscall(__NR_inotify_add_watch, bogus_fd, bogus_path, bogus_mask); + printf("inotify_add_watch(%d, %s, %s) = %s\n", + (int) bogus_fd, bogus_path_str.str, bogus_mask_str, + sprintrc(rc)); + + rc = syscall(__NR_inotify_rm_watch, 0, 0); + printf("inotify_rm_watch(0, 0) = %s\n", sprintrc(rc)); + + rc = syscall(__NR_inotify_rm_watch, bogus_fd, bogus_fd); + printf("inotify_rm_watch(%d, %d) = %s\n", + (int) bogus_fd, (int) bogus_fd, sprintrc(rc)); + + puts("+++ exited with 0 +++"); + + return 0; +} + +#else + +SKIP_MAIN_UNDEFINED("__NR_inotify_add_watch && __NR_inotify_rm_watch"); + +#endif diff --git a/tests/inotify.test b/tests/inotify.test new file mode 100755 index 0000000..d52b61c --- /dev/null +++ b/tests/inotify.test @@ -0,0 +1,6 @@ +#!/bin/sh + +# Check decoding of inotify_add_watch, inotify_rm_watch syscalls. + +. "${srcdir=.}/init.sh" +run_strace_match_diff -e trace=inotify_add_watch,inotify_rm_watch -a1 diff --git a/tests/inotify_init1.c b/tests/inotify_init1.c new file mode 100644 index 0000000..6933b1d --- /dev/null +++ b/tests/inotify_init1.c @@ -0,0 +1,71 @@ +/* + * Check decoding of inotify_init1 syscall. + * + * Copyright (c) 2016 Eugene Syromyatnikov <evg...@gmail.com> + * 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 <asm/unistd.h> + +#if defined(__NR_inotify_init1) + +# include <stdio.h> +# include <unistd.h> + +# include "kernel_types.h" + +int +main(void) +{ + static const struct { + kernel_ulong_t val; + const char *str; + } args[] = { + { ARG_STR(0) }, + { 0xfacefeeddeadbeefULL, "IN_NONBLOCK|IN_CLOEXEC|0xdea5b6ef" }, + { 0x80800, "IN_NONBLOCK|IN_CLOEXEC" }, + { 0x5555555555555555ULL, "0x55555555 /* IN_??? */" }, + }; + + long rc; + size_t i; + + for (i = 0; i < ARRAY_SIZE(args); i++) { + rc = syscall(__NR_inotify_init1, args[i].val); + printf("inotify_init1(%s) = %s\n", args[i].str, sprintrc(rc)); + } + + puts("+++ exited with 0 +++"); + + return 0; +} + +#else + +SKIP_MAIN_UNDEFINED("__NR_inotify_init1"); + +#endif diff --git a/tests/inotify_init1.test b/tests/inotify_init1.test new file mode 100755 index 0000000..5b839f0 --- /dev/null +++ b/tests/inotify_init1.test @@ -0,0 +1,6 @@ +#!/bin/sh + +# Check decoding of inotify_init1 syscall. + +. "${srcdir=.}/init.sh" +run_strace_match_diff -a1 -- 1.7.10.4 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel