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