]> granicus.if.org Git - strace/commitdiff
tests: extend test coverage of mknod syscall
authorDmitry V. Levin <ldv@altlinux.org>
Tue, 26 Apr 2016 11:00:51 +0000 (11:00 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Tue, 26 Apr 2016 11:00:51 +0000 (11:00 +0000)
* mknod.c (main): Check more corner cases of mode_t parser.
* mknod.test: Update.

tests/mknod.c
tests/mknod.test

index b7e02443dbcb7c104385116cf7572c35d4d1f5a3..91ce751e2b3f7ff035c9f400af7e89b83732cb33 100644 (file)
 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;
 }
index 092d770a99bb21e1bd20b16dde898a2597b3bda5..195f1e33fad0f13d8192fbda762a13265e375bab 100755 (executable)
@@ -3,4 +3,4 @@
 # Check mknod syscall decoding.
 
 . "${srcdir=.}/init.sh"
-run_strace_match_diff -a29
+run_strace_match_diff -a18