From: Dmitry V. Levin Date: Tue, 26 Apr 2016 11:00:51 +0000 (+0000) Subject: tests: extend test coverage of mknod syscall X-Git-Tag: v4.12~278 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7dad3f3edde2691fdb084ed7332f713f107361f4;p=strace tests: extend test coverage of mknod syscall * mknod.c (main): Check more corner cases of mode_t parser. * mknod.test: Update. --- diff --git a/tests/mknod.c b/tests/mknod.c index b7e02443..91ce751e 100644 --- a/tests/mknod.c +++ b/tests/mknod.c @@ -19,17 +19,36 @@ int main(void) { - long rc = syscall(__NR_mknod, TMP_FILE, S_IFREG|0600, 0); + long rc = syscall(__NR_mknod, TMP_FILE, 0, 0xdeadbeef); + printf("mknod(\"%s\", 0) = %ld %s (%m)\n", + TMP_FILE, rc, errno2name()); + + rc = syscall(__NR_mknod, TMP_FILE, -1L, 0xdeadbeef); + printf("mknod(\"%s\", %#o) = %ld %s (%m)\n", + TMP_FILE, -1, rc, errno2name()); + + rc = syscall(__NR_mknod, TMP_FILE, S_IFREG|0600, 0); printf("mknod(\"%s\", S_IFREG|0600) = %ld %s (%m)\n", TMP_FILE, rc, errno2name()); - const unsigned long dev = + unsigned long dev = (unsigned long) 0xdeadbeef00000000 | makedev(1, 7); rc = syscall(__NR_mknod, TMP_FILE, S_IFCHR | 0400, dev); printf("mknod(\"%s\", S_IFCHR|0400, makedev(1, 7)) = %ld %s (%m)\n", TMP_FILE, rc, errno2name()); + const unsigned long mode = + ((unsigned long) 0xfacefeedffffffff & ~S_IFMT) | S_IFBLK; + dev = (unsigned long) 0xdeadbeefbadc0ded; + + rc = syscall(__NR_mknod, TMP_FILE, mode, dev); + printf("mknod(\"%s\", S_IFBLK|S_ISUID|S_ISGID|S_ISVTX|%#o" + ", makedev(%u, %u)) = %ld %s (%m)\n", + TMP_FILE, (unsigned) mode & ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX), + major((unsigned) dev), minor((unsigned) dev), + rc, errno2name()); + puts("+++ exited with 0 +++"); return 0; } diff --git a/tests/mknod.test b/tests/mknod.test index 092d770a..195f1e33 100755 --- a/tests/mknod.test +++ b/tests/mknod.test @@ -3,4 +3,4 @@ # Check mknod syscall decoding. . "${srcdir=.}/init.sh" -run_strace_match_diff -a29 +run_strace_match_diff -a18