]> granicus.if.org Git - strace/commitdiff
tests: add more checks of reboot syscall decoding
authorEugene Syromyatnikov <evgsyr@gmail.com>
Wed, 10 Jan 2018 04:31:15 +0000 (05:31 +0100)
committerDmitry V. Levin <ldv@altlinux.org>
Thu, 11 Jan 2018 15:54:33 +0000 (15:54 +0000)
In particular, check for the recent fixes in reboot syscall decoder.

* tests/gen_tests.in (reboot): Provide -s 256 option.
* tests/reboot.c (STR32, STR128): New macros.
(main): Add more checks.

tests/gen_tests.in
tests/reboot.c

index 0b79a4b37902a9558906869ffc3c203f58c6ffcd..86ad37a2d2c46ac9d9b9379ccc5cc5a8455b0bdc 100644 (file)
@@ -282,7 +282,7 @@ readahead   -a1
 readdir        -a16
 readlink       -xx
 readlinkat     -xx
-reboot
+reboot         -s 256
 recvfrom       -a35
 recvmmsg-timeout       -a25 -e trace=recvmmsg
 recvmsg        -eread=0 -ewrite=1 -e trace=recvmsg,sendmsg
index 1699de0f15fb9283241543a2557c475ee1ff75fb..3f819ce89efdbf3019f3e5cfc897bd80a04bc41d 100644 (file)
 # define INVALID_MAGIC 319887762
 # define INVALID_CMD 0x01234568
 
+# define STR32 "AbCdEfGhIjKlMnOpQrStUvWxYz012345"
+# define STR128 STR32 STR32 STR32 STR32
+
 int
 main(void)
 {
+       static const kernel_ulong_t bogus_magic1 =
+               (kernel_ulong_t) 0xFFFFFFFFFFFFFFFFULL;
+       static const kernel_ulong_t bogus_magic2 =
+               (kernel_ulong_t) 0xdeadfacefa57beefULL;
+       static const kernel_ulong_t bogus_cmd =
+               (kernel_ulong_t) 0xbadda7a09caffee1ULL;
        static const char buf[] = "reboot";
-       long rc = syscall(__NR_reboot, LINUX_REBOOT_MAGIC1,
+       static const char str256_buf[] = STR128 STR128;
+
+       long rc;
+       char *str256 = tail_memdup(str256_buf, sizeof(str256_buf) - 1);
+
+       rc = syscall(__NR_reboot, 0, 0, 0, 0);
+       printf("reboot(0 /* LINUX_REBOOT_MAGIC_??? */, "
+              "0 /* LINUX_REBOOT_MAGIC_??? */, "
+              "LINUX_REBOOT_CMD_CAD_OFF) = %s\n",
+              sprintrc(rc));
+
+       rc = syscall(__NR_reboot, bogus_magic1, bogus_magic2, bogus_cmd, -1);
+       printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, "
+              "%#x /* LINUX_REBOOT_MAGIC_??? */, "
+              "%#x /* LINUX_REBOOT_CMD_??? */) = %s\n",
+              (unsigned int) bogus_magic1, (unsigned int) bogus_magic2,
+              (unsigned int) bogus_cmd, sprintrc(rc));
+
+       rc = syscall(__NR_reboot, LINUX_REBOOT_MAGIC1,
                          INVALID_MAGIC, LINUX_REBOOT_CMD_RESTART2, buf);
        printf("reboot(LINUX_REBOOT_MAGIC1, %#x /* LINUX_REBOOT_MAGIC_??? */,"
               " LINUX_REBOOT_CMD_RESTART2, \"%s\") = %s\n",
@@ -26,6 +53,41 @@ main(void)
               " %#x /* LINUX_REBOOT_CMD_??? */) = %s\n",
               INVALID_CMD, sprintrc(rc));
 
+       rc = syscall(__NR_reboot, INVALID_MAGIC, LINUX_REBOOT_MAGIC2A,
+                         LINUX_REBOOT_CMD_RESTART2, str256);
+       printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, LINUX_REBOOT_MAGIC2A, "
+              "LINUX_REBOOT_CMD_RESTART2, \"%.255s\"...) = %s\n",
+              INVALID_MAGIC, str256, sprintrc(rc));
+
+       rc = syscall(__NR_reboot, INVALID_MAGIC, LINUX_REBOOT_MAGIC2B,
+                         LINUX_REBOOT_CMD_RESTART2, str256 + 1);
+       printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, LINUX_REBOOT_MAGIC2B, "
+              "LINUX_REBOOT_CMD_RESTART2, \"%.255s\"...) = %s\n",
+              INVALID_MAGIC, str256 + 1, sprintrc(rc));
+
+       rc = syscall(__NR_reboot, INVALID_MAGIC, LINUX_REBOOT_MAGIC2C,
+                         LINUX_REBOOT_CMD_RESTART2, str256 + 2);
+       printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, LINUX_REBOOT_MAGIC2C, "
+              "LINUX_REBOOT_CMD_RESTART2, %p) = %s\n",
+              INVALID_MAGIC, str256 + 2, sprintrc(rc));
+
+       str256[255] = '\0';
+       rc = syscall(__NR_reboot, INVALID_MAGIC, bogus_magic1,
+                         LINUX_REBOOT_CMD_RESTART2, str256);
+       printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, "
+              "%#x /* LINUX_REBOOT_MAGIC_??? */, "
+              "LINUX_REBOOT_CMD_RESTART2, \"%.255s\"...) = %s\n",
+              INVALID_MAGIC, (unsigned int) bogus_magic1, str256,
+              sprintrc(rc));
+
+       rc = syscall(__NR_reboot, INVALID_MAGIC, bogus_magic1,
+                         LINUX_REBOOT_CMD_RESTART2, str256 + 1);
+       printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, "
+              "%#x /* LINUX_REBOOT_MAGIC_??? */, "
+              "LINUX_REBOOT_CMD_RESTART2, \"%.254s\") = %s\n",
+              INVALID_MAGIC, (unsigned int) bogus_magic1, str256 + 1,
+              sprintrc(rc));
+
        puts("+++ exited with 0 +++");
        return 0;
 }