14 #ifdef HAVE_SYS_SYSCALL_H
15 #include <sys/syscall.h>
21 static void test_uwrap_syscall_setresuid32(void **state)
26 uid_t cp_ruid, cp_euid, cp_suid;
29 (void) state; /* unused */
32 cp_ruid = cp_euid = cp_suid = -1;
33 rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
34 assert_return_code(rc, errno);
35 assert_int_equal(cp_ruid, 0);
36 assert_int_equal(cp_euid, 0);
37 assert_int_equal(cp_suid, 0);
40 assert_int_equal(u, 0);
42 rc = syscall(SYS_setresuid32, -1, -1, -1);
43 assert_return_code(rc, errno);
45 rc = syscall(SYS_setresuid32, 0x4444, 0x5555, -1);
46 assert_return_code(rc, errno);
49 cp_ruid = cp_euid = cp_suid = -1;
50 rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
51 assert_return_code(rc, errno);
52 assert_int_equal(cp_ruid, 0x4444);
53 assert_int_equal(cp_euid, 0x5555);
54 assert_int_equal(cp_suid, 0);
58 assert_int_equal(u, 0x4444);
61 assert_int_equal(u, 0x5555);
63 /* We can go back cause the suid is 0 */
64 rc = syscall(SYS_setresuid32, 0, -1, -1);
65 assert_return_code(rc, errno);
68 cp_ruid = cp_euid = cp_suid = -1;
69 rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
70 assert_return_code(rc, errno);
71 assert_int_equal(cp_ruid, 0);
72 assert_int_equal(cp_euid, 0x5555);
73 assert_int_equal(cp_suid, 0);
77 assert_int_equal(u, 0);
79 rc = syscall(SYS_setresuid32, -1, 0, -1);
80 assert_return_code(rc, errno);
83 cp_ruid = cp_euid = cp_suid = -1;
84 rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
85 assert_return_code(rc, errno);
86 assert_int_equal(cp_ruid, 0);
87 assert_int_equal(cp_euid, 0);
88 assert_int_equal(cp_suid, 0);
92 assert_int_equal(u, 0);
94 rc = syscall(SYS_setresuid32, 0, 0x5555, 0x6666);
95 assert_return_code(rc, errno);
98 cp_ruid = cp_euid = cp_suid = -1;
99 rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
100 assert_return_code(rc, errno);
101 assert_int_equal(cp_ruid, 0);
102 assert_int_equal(cp_euid, 0x5555);
103 assert_int_equal(cp_suid, 0x6666);
107 * The euid needs to be 0 in order to change to an
108 * unknown value (here 0x4444)
110 rc = syscall(SYS_setresuid32, 0x5555, 0x6666, 0x4444);
111 assert_int_equal(rc, -1);
112 assert_int_equal(errno, EPERM);
114 #ifdef HAVE_GETRESUID
115 cp_ruid = cp_euid = cp_suid = -1;
116 rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
117 assert_return_code(rc, errno);
118 assert_int_equal(cp_ruid, 0);
119 assert_int_equal(cp_euid, 0x5555);
120 assert_int_equal(cp_suid, 0x6666);
123 /* But we can rotate the values */
125 rc = syscall(SYS_setresuid32, 0x5555, 0x6666, 0);
126 assert_return_code(rc, errno);
128 #ifdef HAVE_GETRESUID
129 cp_ruid = cp_euid = cp_suid = -1;
130 rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
131 assert_return_code(rc, errno);
132 assert_int_equal(cp_ruid, 0x5555);
133 assert_int_equal(cp_euid, 0x6666);
134 assert_int_equal(cp_suid, 0);
138 * The euid needs to be 0 in order to change to an
139 * unknown value (here 0x4444)
141 rc = syscall(SYS_setresuid32, 0x5555, 0x6666, 0x4444);
142 assert_int_equal(rc, -1);
143 assert_int_equal(errno, EPERM);
145 #ifdef HAVE_GETRESUID
146 cp_ruid = cp_euid = cp_suid = -1;
147 rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
148 assert_return_code(rc, errno);
149 assert_int_equal(cp_ruid, 0x5555);
150 assert_int_equal(cp_euid, 0x6666);
151 assert_int_equal(cp_suid, 0);
154 /* But we can rotate the values */
155 rc = syscall(SYS_setresuid32, 0x5555, 0, 0x6666);
156 assert_return_code(rc, errno);
158 #ifdef HAVE_GETRESUID
159 cp_ruid = cp_euid = cp_suid = -1;
160 rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
161 assert_return_code(rc, errno);
162 assert_int_equal(cp_ruid, 0x5555);
163 assert_int_equal(cp_euid, 0);
164 assert_int_equal(cp_suid, 0x6666);
168 * With euid == 0 we can change to completely unrelated values.
170 rc = syscall(SYS_setresuid32, 0x1111, 0x2222, 0x3333);
171 assert_return_code(rc, errno);
173 #ifdef HAVE_GETRESUID
174 cp_ruid = cp_euid = cp_suid = -1;
175 rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
176 assert_return_code(rc, errno);
177 assert_int_equal(cp_ruid, 0x1111);
178 assert_int_equal(cp_euid, 0x2222);
179 assert_int_equal(cp_suid, 0x3333);
182 rc = syscall(SYS_setresuid32, 0, -1, -1);
183 assert_int_equal(rc, -1);
184 assert_int_equal(errno, EPERM);
186 #ifdef HAVE_GETRESUID
187 cp_ruid = cp_euid = cp_suid = -1;
188 rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
189 assert_return_code(rc, errno);
190 assert_int_equal(cp_ruid, 0x1111);
191 assert_int_equal(cp_euid, 0x2222);
192 assert_int_equal(cp_suid, 0x3333);
195 rc = syscall(SYS_setresuid32, -1, 0, -1);
196 assert_int_equal(rc, -1);
197 assert_int_equal(errno, EPERM);
199 #ifdef HAVE_GETRESUID
200 cp_ruid = cp_euid = cp_suid = -1;
201 rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
202 assert_return_code(rc, errno);
203 assert_int_equal(cp_ruid, 0x1111);
204 assert_int_equal(cp_euid, 0x2222);
205 assert_int_equal(cp_suid, 0x3333);
208 rc = syscall(SYS_setresuid32, -1, -1, 0);
209 assert_int_equal(rc, -1);
210 assert_int_equal(errno, EPERM);
212 #ifdef HAVE_GETRESUID
213 cp_ruid = cp_euid = cp_suid = -1;
214 rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
215 assert_return_code(rc, errno);
216 assert_int_equal(cp_ruid, 0x1111);
217 assert_int_equal(cp_euid, 0x2222);
218 assert_int_equal(cp_suid, 0x3333);
222 * We can still roate the values
224 rc = syscall(SYS_setresuid32, 0x2222, 0x3333, 0x1111);
225 assert_return_code(rc, errno);
227 #ifdef HAVE_GETRESUID
228 cp_ruid = cp_euid = cp_suid = -1;
229 rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
230 assert_return_code(rc, errno);
231 assert_int_equal(cp_ruid, 0x2222);
232 assert_int_equal(cp_euid, 0x3333);
233 assert_int_equal(cp_suid, 0x1111);
237 * We can still roate the values
239 rc = syscall(SYS_setresuid32, 0x3333, 0x1111, 0x2222);
240 assert_return_code(rc, errno);
242 #ifdef HAVE_GETRESUID
243 cp_ruid = cp_euid = cp_suid = -1;
244 rc = getresuid(&cp_ruid, &cp_euid, &cp_suid);
245 assert_return_code(rc, errno);
246 assert_int_equal(cp_ruid, 0x3333);
247 assert_int_equal(cp_euid, 0x1111);
248 assert_int_equal(cp_suid, 0x2222);
255 const struct CMUnitTest uwrap_tests[] = {
256 cmocka_unit_test(test_uwrap_syscall_setresuid32),
259 rc = cmocka_run_group_tests(uwrap_tests, NULL, NULL);