xref: /aosp_15_r20/external/strace/tests/reboot.c (revision cf84ac9a129d8ea9952db616b4e9b904c4bdde56)
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