1 #include "tests.h" 2 #include <asm/unistd.h> 3 4 #ifdef __NR_reboot 5 6 # include <stdio.h> 7 # include <linux/reboot.h> 8 # include <unistd.h> 9 10 # define INVALID_MAGIC 319887762 11 # define INVALID_CMD 0x01234568 12 13 # define STR32 "AbCdEfGhIjKlMnOpQrStUvWxYz012345" 14 # define STR128 STR32 STR32 STR32 STR32 15 16 int 17 main(void) 18 { 19 static const kernel_ulong_t bogus_magic1 = 20 (kernel_ulong_t) 0xFFFFFFFFFFFFFFFFULL; 21 static const kernel_ulong_t bogus_magic2 = 22 (kernel_ulong_t) 0xdeadfacefa57beefULL; 23 static const kernel_ulong_t bogus_cmd = 24 (kernel_ulong_t) 0xbadda7a09caffee1ULL; 25 static const char buf[] = "reboot"; 26 static const char str256_buf[] = STR128 STR128; 27 28 long rc; 29 char *str256 = tail_memdup(str256_buf, sizeof(str256_buf) - 1); 30 31 rc = syscall(__NR_reboot, 0, 0, 0, 0); 32 printf("reboot(0 /* LINUX_REBOOT_MAGIC_??? */, " 33 "0 /* LINUX_REBOOT_MAGIC_??? */, " 34 "LINUX_REBOOT_CMD_CAD_OFF) = %s\n", 35 sprintrc(rc)); 36 37 rc = syscall(__NR_reboot, bogus_magic1, bogus_magic2, bogus_cmd, -1); 38 printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, " 39 "%#x /* LINUX_REBOOT_MAGIC_??? */, " 40 "%#x /* LINUX_REBOOT_CMD_??? */) = %s\n", 41 (unsigned int) bogus_magic1, (unsigned int) bogus_magic2, 42 (unsigned int) bogus_cmd, sprintrc(rc)); 43 44 rc = syscall(__NR_reboot, LINUX_REBOOT_MAGIC1, 45 INVALID_MAGIC, LINUX_REBOOT_CMD_RESTART2, buf); 46 printf("reboot(LINUX_REBOOT_MAGIC1, %#x /* LINUX_REBOOT_MAGIC_??? */," 47 " LINUX_REBOOT_CMD_RESTART2, \"%s\") = %s\n", 48 INVALID_MAGIC, buf, sprintrc(rc)); 49 50 rc = syscall(__NR_reboot, LINUX_REBOOT_MAGIC1, 51 LINUX_REBOOT_MAGIC2, INVALID_CMD); 52 printf("reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2," 53 " %#x /* LINUX_REBOOT_CMD_??? */) = %s\n", 54 INVALID_CMD, sprintrc(rc)); 55 56 rc = syscall(__NR_reboot, INVALID_MAGIC, LINUX_REBOOT_MAGIC2A, 57 LINUX_REBOOT_CMD_RESTART2, str256); 58 printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, LINUX_REBOOT_MAGIC2A, " 59 "LINUX_REBOOT_CMD_RESTART2, \"%.255s\"...) = %s\n", 60 INVALID_MAGIC, str256, sprintrc(rc)); 61 62 rc = syscall(__NR_reboot, INVALID_MAGIC, LINUX_REBOOT_MAGIC2B, 63 LINUX_REBOOT_CMD_RESTART2, str256 + 1); 64 printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, LINUX_REBOOT_MAGIC2B, " 65 "LINUX_REBOOT_CMD_RESTART2, \"%.255s\"...) = %s\n", 66 INVALID_MAGIC, str256 + 1, sprintrc(rc)); 67 68 rc = syscall(__NR_reboot, INVALID_MAGIC, LINUX_REBOOT_MAGIC2C, 69 LINUX_REBOOT_CMD_RESTART2, str256 + 2); 70 printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, LINUX_REBOOT_MAGIC2C, " 71 "LINUX_REBOOT_CMD_RESTART2, %p) = %s\n", 72 INVALID_MAGIC, str256 + 2, sprintrc(rc)); 73 74 str256[255] = '\0'; 75 rc = syscall(__NR_reboot, INVALID_MAGIC, bogus_magic1, 76 LINUX_REBOOT_CMD_RESTART2, str256); 77 printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, " 78 "%#x /* LINUX_REBOOT_MAGIC_??? */, " 79 "LINUX_REBOOT_CMD_RESTART2, \"%.255s\"...) = %s\n", 80 INVALID_MAGIC, (unsigned int) bogus_magic1, str256, 81 sprintrc(rc)); 82 83 rc = syscall(__NR_reboot, INVALID_MAGIC, bogus_magic1, 84 LINUX_REBOOT_CMD_RESTART2, str256 + 1); 85 printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, " 86 "%#x /* LINUX_REBOOT_MAGIC_??? */, " 87 "LINUX_REBOOT_CMD_RESTART2, \"%.254s\") = %s\n", 88 INVALID_MAGIC, (unsigned int) bogus_magic1, str256 + 1, 89 sprintrc(rc)); 90 91 puts("+++ exited with 0 +++"); 92 return 0; 93 } 94 95 #else 96 97 SKIP_MAIN_UNDEFINED("__NR_reboot") 98 99 #endif 100