1 /*
2  * Copyright (C) 2013-2021 Canonical, Ltd.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * This code is a complete clean re-write of the stress tool by
19  * Colin Ian King <colin.king@canonical.com> and attempts to be
20  * backwardly compatible with the stress tool by Amos Waterland
21  * <apw@rossby.metr.ou.edu> but has more stress tests and more
22  * functionality.
23  *
24  */
25 #include "stress-ng.h"
26 
27 static const stress_help_t help[] = {
28 	{ NULL,	"sysinval N",		"start N workers that pass invalid args to syscalls" },
29 	{ NULL,	"sysinval-ops N",	"stop after N sysinval bogo syscalls" },
30 	{ NULL,	NULL,		    NULL }
31 };
32 
33 #if defined(HAVE_SYSCALL_H) &&	\
34     !defined(__APPLE__) && 	\
35     !defined(__gnu_hurd__)
36 
37 #define ARG_BITMASK(x, bitmask)	(((x) & (bitmask)) == (bitmask))
38 
39 #define SYSCALL_HASH_TABLE_SIZE	(10007)	/* Hash table size (prime) */
40 #define SYSCALL_FAIL		(0x00)	/* Expected behaviour */
41 #define	SYSCALL_CRASH		(0x01)	/* Syscalls that crash the child */
42 #define SYSCALL_ERRNO_ZERO	(0x02)	/* Syscalls that return 0 */
43 #define SYSCALL_TIMED_OUT	(0x03)	/* Syscalls that time out */
44 
45 #define MAX_CRASHES		(10)
46 #define SYSCALL_TIMEOUT_USEC	(10000)	/* Timeout syscalls duration */
47 
48 /*
49  *  tuple of system call number and stringified system call
50  */
51 #if defined(__NR_exit)
52 #define SYS(x)		__NR_ ## x, # x
53 #define DEFSYS(x)	__NR_ ## x
54 #elif defined(SYS_exit)
55 #define SYS(x)		SYS_ ## x, # x
56 #define DEFSYS(x)	SYS_ ## x
57 #else
58 #define SYS(x) 		0, "unknown"
59 #define DEFSYS(x) 	0
60 #endif
61 
62 /*
63  *  system call argument types
64  */
65 #define ARG_NONE		0x00000000UL
66 #define ARG_PTR			0x00000002UL
67 #define ARG_INT			0x00000004UL
68 #define ARG_UINT		0x00000008UL
69 #define ARG_SOCKFD		0x00000010UL
70 #define ARG_STRUCT_SOCKADDR	0x00000020UL
71 #define ARG_SOCKLEN_T		0x00000040UL
72 #define ARG_FLAG		0x00000080UL
73 #define ARG_BRK_ADDR		0x00000100UL
74 #define ARG_MODE		0x00000200UL
75 #define ARG_LEN			0x00000400UL
76 #define ARG_SECONDS		0x00001000UL
77 #define ARG_BPF_ATTR		0x00002000UL
78 #define ARG_EMPTY_FILENAME	0x00004000UL	/* "" */
79 #define ARG_DEVZERO_FILENAME	0x00008000UL	/* /dev/zero */
80 #define ARG_CLOCKID_T		0x00010000UL
81 #define ARG_FUNC_PTR		0x00020000UL
82 #define ARG_FD			0x00040000UL
83 #define ARG_TIMEOUT		0x00080000UL
84 #define ARG_DIRFD		0x00100000UL
85 #define ARG_DEVNULL_FILENAME	0x00200000UL	/* /dev/null */
86 #define ARG_RND			0x00400000UL
87 #define ARG_PID			0x00800000UL
88 #define ARG_NON_NULL_PTR	0x01000000UL
89 #define ARG_NON_ZERO_LEN	0x02000000UL
90 #define ARG_GID			0x04000000UL
91 #define ARG_UID			0x08000000UL
92 #define ARG_FUTEX_PTR		0x10000000UL
93 #define ARG_PTR_WR		0x20000000UL	/* kernel writes data to ptr */
94 #define ARG_ACCESS_MODE		0x40000000UL	/* faccess modes */
95 #define ARG_MISC		0x80000000UL
96 
97 /*
98  *  misc system call args
99  */
100 #define ARG_ADD_KEY_TYPES	0x00000001UL | ARG_MISC
101 #define ARG_ADD_KEY_DESCRS	0x00000002UL | ARG_MISC
102 #define ARG_BPF_CMDS		0x00000003UL | ARG_MISC
103 #define ARG_BPF_LEN		0x00000004UL | ARG_MISC
104 
105 #define ARG_VALUE(x, v)		{ (x), SIZEOF_ARRAY(v), (unsigned long *)v }
106 #define ARG_MISC_ID(x)		((x) & ~ARG_MISC)
107 
108 /*
109  *  rotate right for hashing
110  */
111 #define ROR(val)						\
112 do {								\
113 	unsigned long tmp = val;				\
114 	const size_t bits = (sizeof(unsigned long) * 8) - 1;	\
115 	const unsigned long bit0 = (tmp & 1) << bits;		\
116 	tmp >>= 1;                              		\
117 	tmp |= bit0;                            		\
118 	val = tmp;                              		\
119 } while (0)
120 
121 #define SHR_UL(v, shift) ((unsigned long)(((unsigned long long)v) << shift))
122 
123 /*
124  *  per system call testing information, each system call
125  *  to be exercised has one or more of these records.
126  */
127 typedef struct {
128 	const unsigned long syscall;	/* system call number */
129 	const char *name;		/* text name of system call */
130 	const int num_args;		/* number of arguments */
131 	unsigned long arg_bitmasks[6];	/* semantic info about each argument */
132 } stress_syscall_arg_t;
133 
134 /*
135  *  argument semantic information, unique argument types
136  *  have one of these records to represent the different
137  *  invalid argument values. Keep these values as short
138  *  as possible as each new value increases the number of
139  *  permutations
140  */
141 typedef struct {
142 	unsigned long bitmask;		/* bitmask representing arg type */
143 	size_t num_values;		/* number of different invalid values */
144 	unsigned long *values;		/* invalid values */
145 } stress_syscall_arg_values_t;
146 
147 /*
148  *  hash table entry for syscalls and arguments that need
149  *  to be skipped either because they crash the child or
150  *  because the system call succeeds
151  */
152 typedef struct stress_syscall_args_hash {
153 	struct stress_syscall_args_hash *next;	/* next item in list */
154 	unsigned long hash;		/* has of system call and args */
155 	unsigned long syscall;		/* system call number */
156 	unsigned long args[6];		/* arguments */
157 	uint8_t	 type;			/* type of failure */
158 } stress_syscall_arg_hash_t;
159 
160 /*
161  *  hash table - in the parent context this records system
162  *  calls that crash the child. in the child context this
163  *  contains the same crasher data that the parent has plus
164  *  a cache of the system calls that return 0 and we don't
165  *  want to retest - this child cached data is lost when the
166   * child crashes.
167  */
168 static stress_syscall_arg_hash_t *hash_table[SYSCALL_HASH_TABLE_SIZE];
169 
170 static double time_end;
171 
172 static const int sigs[] = {
173 #if defined(SIGILL)
174 	SIGILL,
175 #endif
176 #if defined(SIGTRAP)
177 	SIGTRAP,
178 #endif
179 #if defined(SIGFPE)
180 	SIGFPE,
181 #endif
182 #if defined(SIGBUS)
183 	SIGBUS,
184 #endif
185 #if defined(SIGSEGV)
186 	SIGSEGV,
187 #endif
188 #if defined(SIGIOT)
189 	SIGIOT,
190 #endif
191 #if defined(SIGEMT)
192 	SIGEMT,
193 #endif
194 #if defined(SIGALRM)
195 	SIGALRM,
196 #endif
197 #if defined(SIGINT)
198 	SIGINT,
199 #endif
200 #if defined(SIGHUP)
201 	SIGHUP
202 #endif
203 };
204 
205 static uint8_t *small_ptr;
206 static uint8_t *small_ptr_wr;
207 static uint8_t *page_ptr;
208 static uint8_t *page_ptr_wr;
209 
210 static const stress_syscall_arg_t stress_syscall_args[] = {
211 #if DEFSYS(_llseek)
212 	{ SYS(_llseek), 5, { ARG_FD, ARG_UINT, ARG_UINT, ARG_PTR, ARG_INT } },
213 #endif
214 #if DEFSYS(_sysctl)
215 	{ SYS(_sysctl), 1, { ARG_PTR } },
216 #endif
217 #if DEFSYS(accept)
218 	{ SYS(accept), 3, { ARG_SOCKFD, ARG_PTR | ARG_STRUCT_SOCKADDR, ARG_PTR, 0, 0, 0 } },
219 #endif
220 #if DEFSYS(accept4)
221 	{ SYS(accept4), 4, { ARG_SOCKFD, ARG_PTR | ARG_STRUCT_SOCKADDR, ARG_PTR, ARG_FLAG, 0, 0 } },
222 #endif
223 #if DEFSYS(access)
224 	{ SYS(access), 2, { ARG_PTR | ARG_EMPTY_FILENAME, ARG_MODE, 0, 0, 0, 0 } },
225 	{ SYS(access), 2, { ARG_PTR | ARG_DEVZERO_FILENAME, ARG_MODE, 0, 0, 0, 0 } },
226 	{ SYS(access), 2, { ARG_PTR | ARG_EMPTY_FILENAME, ARG_ACCESS_MODE, 0, 0, 0, 0 } },
227 	{ SYS(access), 2, { ARG_PTR | ARG_DEVZERO_FILENAME, ARG_ACCESS_MODE, 0, 0, 0, 0 } },
228 #endif
229 #if DEFSYS(acct)
230 	{ SYS(acct), 1, { ARG_PTR | ARG_EMPTY_FILENAME, 0, 0, 0, 0, 0 } },
231 #endif
232 #if DEFSYS(add_key)
233 	{ SYS(add_key), 5, { ARG_ADD_KEY_TYPES, ARG_ADD_KEY_DESCRS, ARG_PTR, ARG_LEN, ARG_UINT, 0 } },
234 	{ SYS(add_key), 5, { ARG_PTR, ARG_PTR, ARG_PTR, ARG_LEN, ARG_UINT, 0 } },
235 #endif
236 #if DEFSYS(adjtimex)
237 	/* Need to also test invalid args:
238 		time.tv_usec < 0
239 		time.tv_usec > 1000000
240 		tick <  900000/USER_HZ
241 		tick > 100000/USER_HZ
242 		(txc->modes & ADJ_NANO) and txc->time.tv_usec >= NSEC_PER_SEC
243 	*/
244 	{ SYS(adjtimex), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
245 #endif
246 #if DEFSYS(alarm) && 0
247 	{ SYS(alarm), 1, { ARG_SECONDS, 0, 0, 0, 0, 0 } },
248 #endif
249 #if DEFSYS(alloc_hugepages)
250 	/* removed in 2.5.44 */
251 	{ SYS(alloc_hugepages), 5, { ARG_INT, ARG_PTR, ARG_LEN, ARG_INT, ARG_FLAG } },
252 #endif
253 #if DEFSYS(arc_gettls)
254 	/* ARC only */
255 #endif
256 #if DEFSYS(arc_settls)
257 	/* ARC only */
258 #endif
259 #if DEFSYS(arc_usr_cmpxchg)
260 	/* ARC only */
261 #endif
262 #if DEFSYS(arch_prctl)
263 	{ SYS(arch_prctl), 2, { ARG_INT, ARG_UINT } },
264 	{ SYS(arch_prctl), 2, { ARG_INT, ARG_PTR } },
265 #endif
266 #if DEFSYS(atomic_barrier)
267 	/* m68k only */
268 #endif
269 #if DEFSYS(atomic_cmpxchg_32)
270 	/* m68k only */
271 #endif
272 #if DEFSYS(bdflush)
273 	/* deprecated */
274 	{ SYS(bdflush), 2, { ARG_INT, ARG_PTR } },
275 	{ SYS(bdflush), 2, { ARG_INT, ARG_UINT } },
276 #endif
277 #if DEFSYS(bfin_spinlock)
278 	/* blackfin, removed in 4.17 */
279 #endif
280 #if DEFSYS(bind)
281 	{ SYS(bind), 3, { ARG_SOCKFD, ARG_PTR | ARG_STRUCT_SOCKADDR, ARG_SOCKLEN_T, 0, 0, 0 } },
282 #endif
283 #if DEFSYS(bpf)
284 	{ SYS(bpf), 3, { ARG_BPF_CMDS, ARG_PTR | ARG_BPF_ATTR, ARG_BPF_LEN, 0, 0, 0 } },
285 	{ SYS(bpf), 3, { ARG_BPF_CMDS, ARG_PTR | ARG_BPF_ATTR, ARG_LEN, 0, 0, 0 } },
286 	{ SYS(bpf), 3, { ARG_INT, ARG_PTR | ARG_BPF_ATTR, ARG_LEN, 0, 0, 0 } },
287 
288 #endif
289 #if DEFSYS(brk)
290 	{ SYS(brk), 1, { ARG_PTR | ARG_BRK_ADDR, 0, 0, 0, 0, 0 } },
291 	{ SYS(brk), 1, { ARG_PTR_WR | ARG_BRK_ADDR, 0, 0, 0, 0, 0 } },
292 #endif
293 #if DEFSYS(breakpoint)
294 	/* ARM OABI only */
295 #endif
296 #if DEFSYS(cacheflush)
297 	{ SYS(cacheflush), 3, { ARG_PTR, ARG_INT, ARG_INT, 0, 0, 0 } },
298 #endif
299 #if DEFSYS(capget)
300 	{ SYS(capget), 2, { ARG_INT, ARG_PTR, 0, 0, 0, 0 } },
301 	{ SYS(capget), 2, { ARG_INT, ARG_PTR_WR, 0, 0, 0, 0 } },
302 #endif
303 #if DEFSYS(capset)
304 	{ SYS(capset), 2, { ARG_INT, ARG_PTR, 0, 0, 0, 0 } },
305 #endif
306 #if DEFSYS(chdir)
307 	{ SYS(chdir), 1, { ARG_PTR | ARG_EMPTY_FILENAME, 0, 0, 0, 0, 0 } },
308 	{ SYS(chdir), 1, { ARG_PTR | ARG_DEVZERO_FILENAME, 0, 0, 0, 0, 0 } },
309 #endif
310 #if DEFSYS(chmod)
311 	{ SYS(chmod), 2, { ARG_PTR | ARG_EMPTY_FILENAME, ARG_INT, 0, 0, 0, 0 } },
312 #endif
313 #if DEFSYS(chown)
314 	{ SYS(chown), 2, { ARG_PTR | ARG_EMPTY_FILENAME, ARG_INT, 0, 0, 0, 0 } },
315 #endif
316 #if DEFSYS(chroot)
317 	{ SYS(chroot), 1, { ARG_PTR | ARG_EMPTY_FILENAME, 0, 0, 0, 0, 0 } },
318 	{ SYS(chroot), 1, { ARG_PTR | ARG_DEVZERO_FILENAME, 0, 0, 0, 0, 0 } },
319 #endif
320 #if DEFSYS(clock_adjtime)
321 	{ SYS(clock_adjtime), 2, { ARG_CLOCKID_T, ARG_PTR, 0, 0, 0, 0 } },
322 #endif
323 #if DEFSYS(clock_getres)
324 	{ SYS(clock_getres), 2, { ARG_CLOCKID_T, ARG_PTR, 0, 0, 0, 0 } },
325 	{ SYS(clock_getres), 2, { ARG_CLOCKID_T, ARG_PTR_WR, 0, 0, 0, 0 } },
326 #endif
327 #if DEFSYS(clock_gettime)
328 	{ SYS(clock_gettime), 2, { ARG_CLOCKID_T, ARG_PTR, 0, 0, 0, 0 } },
329 	{ SYS(clock_gettime), 2, { ARG_CLOCKID_T, ARG_PTR_WR, 0, 0, 0, 0 } },
330 #endif
331 #if DEFSYS(clock_nanosleep)
332 	{ SYS(clock_nanosleep), 4, { ARG_CLOCKID_T, ARG_UINT, ARG_PTR, ARG_PTR, 0, 0 } },
333 #endif
334 #if DEFSYS(clock_settime)
335 	{ SYS(clock_settime), 2, { ARG_CLOCKID_T, ARG_PTR, 0, 0, 0, 0 } },
336 #endif
337 #if DEFSYS(clone)
338 	/* { SYS(clone), 6, { ARG_FUNC_PTR, ARG_PTR, ARG_INT, ARG_PTR, ARG_PTR, ARG_PTR } }, */
339 #endif
340 #if DEFSYS(clone2)
341 	/* IA-64 only */
342 #endif
343 #if DEFSYS(clone3)
344 	/* { SYS(clone3), 2, { ARG_PTR, ARG_LEN, 0, 0, 0, 0 } }, */
345 #endif
346 #if DEFSYS(close)
347 	{ SYS(close), 1, { ARG_FD, 0, 0, 0, 0, 0 } },
348 #endif
349 #if DEFSYS(cmpxchg_badaddr)
350 	/* Tile only, removed 4.17 */
351 #endif
352 #if DEFSYS(connect)
353 	{ SYS(connect), 3, { ARG_SOCKFD, ARG_PTR, ARG_LEN, 0, 0, 0 } },
354 #endif
355 #if DEFSYS(copy_file_range)
356 	{ SYS(copy_file_range), 6, { ARG_FD, ARG_PTR, ARG_FD, ARG_PTR, ARG_LEN, ARG_FLAG } },
357 #endif
358 #if DEFSYS(creat)
359 	{ SYS(creat), 3, { ARG_EMPTY_FILENAME, ARG_FLAG, ARG_MODE, 0, 0, 0 } },
360 #endif
361 #if DEFSYS(create_module)
362 	{ SYS(create_module), 2, { ARG_PTR, ARG_LEN, 0, 0, 0, 0 } },
363 #endif
364 #if DEFSYS(delete_module)
365 	{ SYS(delete_module), 2, { ARG_PTR, ARG_FLAG, 0, 0, 0, 0 } },
366 #endif
367 #if DEFSYS(dma_memcpy)
368 	/* blackfin, removed in 4.17 */
369 #endif
370 #if DEFSYS(dup)
371 	{ SYS(dup), 1, { ARG_FD, 0, 0, 0, 0, 0 } },
372 #endif
373 #if DEFSYS(dup2)
374 	{ SYS(dup2), 2, { ARG_FD, ARG_FD, 0, 0, 0, 0 } },
375 #endif
376 #if DEFSYS(dup3)
377 	{ SYS(dup3), 3, { ARG_FD, ARG_FD, ARG_FLAG, 0, 0, 0 } },
378 #endif
379 #if DEFSYS(epoll_create)
380 	{ SYS(epoll_create), 1, { ARG_LEN,  0, 0, 0, 0, 0 } },
381 #endif
382 #if DEFSYS(epoll_create1)
383 	{ SYS(epoll_create1), 1, { ARG_FLAG, 0, 0, 0, 0, 0 } },
384 #endif
385 #if DEFSYS(epoll_ctl)
386 	{ SYS(epoll_ctl), 4, { ARG_FD, ARG_INT, ARG_FD, ARG_PTR, 0, 0 } },
387 #endif
388 #if DEFSYS(epoll_ctl_add)
389 	{ SYS(epoll_ctl_add), 4, { ARG_FD, ARG_INT, ARG_FD, ARG_PTR, 0, 0 } },
390 #endif
391 #if DEFSYS(epoll_wait)
392 	{ SYS(epoll_wait), 4, { ARG_FD, ARG_PTR, ARG_INT, ARG_TIMEOUT, 0, 0 } },
393 	{ SYS(epoll_wait), 4, { ARG_FD, ARG_PTR_WR, ARG_INT, ARG_TIMEOUT, 0, 0 } },
394 #endif
395 #if DEFSYS(epoll_pwait)
396 	{ SYS(epoll_pwait), 5, { ARG_FD, ARG_PTR, ARG_INT, ARG_TIMEOUT, ARG_PTR, 0 } },
397 	{ SYS(epoll_pwait), 5, { ARG_FD, ARG_PTR, ARG_INT, ARG_TIMEOUT, ARG_PTR_WR, 0 } },
398 	{ SYS(epoll_pwait), 5, { ARG_FD, ARG_PTR_WR, ARG_INT, ARG_TIMEOUT, ARG_PTR_WR, 0 } },
399 #endif
400 #if DEFSYS(evendfd)
401 	{ SYS(eventfd), 2, { ARG_INT, ARG_FLAG, 0, 0, 0, 0 } },
402 #endif
403 #if DEFSYS(evendfd2)
404 	{ SYS(eventfd2), 2, { ARG_INT, ARG_FLAG, 0, 0, 0, 0 } },
405 #endif
406 #if DEFSYS(exec)
407 	/* too risky for now */
408 #endif
409 #if DEFSYS(execv)
410 	/* too risky for now */
411 #endif
412 #if DEFSYS(execve)
413 	/* too risky for now */
414 #endif
415 #if DEFSYS(exit)
416 	/* exiting the testing child is not a good idea */
417 #endif
418 #if DEFSYS(exit_group)
419 	/* exiting the testing child is not a good idea */
420 #endif
421 #if DEFSYS(faccessat)
422 	{ SYS(faccessat), 4, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_MODE, ARG_FLAG, 0, 0 } },
423 	{ SYS(faccessat), 4, { ARG_DIRFD, ARG_DEVNULL_FILENAME, ARG_MODE, ARG_FLAG, 0, 0 } },
424 	{ SYS(faccessat), 4, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_ACCESS_MODE, ARG_FLAG, 0, 0 } },
425 	{ SYS(faccessat), 4, { ARG_DIRFD, ARG_DEVNULL_FILENAME, ARG_ACCESS_MODE, ARG_FLAG, 0, 0 } },
426 #endif
427 #if DEFSYS(fadvise64)
428 	{ SYS(fadvise64), 4, { ARG_FD, ARG_UINT, ARG_LEN, ARG_INT, 0, 0 } },
429 #endif
430 #if DEFSYS(fadvise64_64)
431 	/* TODO */
432 #endif
433 #if DEFSYS(fallocate)
434 	{ SYS(fallocate), 4, { ARG_FD, ARG_MODE, ARG_INT, ARG_INT, 0, 0 } },
435 #endif
436 #if DEFSYS(fanotify_init)
437 	{ SYS(fanotify_init), 2, { ARG_FLAG, ARG_FLAG, 0, 0, 0, 0 } },
438 #endif
439 #if DEFSYS(fanotify_mark)
440 	{ SYS(fanotify_mark), 5, { ARG_FD, ARG_FLAG, ARG_UINT, ARG_FD, ARG_EMPTY_FILENAME, 0 } },
441 #endif
442 #if DEFSYS(fchdir)
443 	{ SYS(fchdir), 1, { ARG_FD, 0, 0, 0, 0, 0 } },
444 #endif
445 #if DEFSYS(fchmod)
446 	{ SYS(fchmod), 2, { ARG_FD, ARG_MODE, 0, 0, 0, 0 } },
447 #endif
448 #if DEFSYS(fchmodat)
449 	{ SYS(fchmodat), 4, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_MODE, ARG_FLAG, 0, 0 } },
450 #endif
451 #if DEFSYS(fchown)
452 	// { SYS(fchown), 3, { ARG_FD, 0, 0, 0, 0, 0 } },
453 #endif
454 #if DEFSYS(fchownat)
455 	{ SYS(fchownat), 5, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_UINT, ARG_UINT, ARG_UINT, 0 } },
456 #endif
457 #if DEFSYS(fcntl)
458 	{ SYS(fcntl), 6, { ARG_FD, ARG_RND, ARG_RND, ARG_RND, ARG_RND, ARG_RND } },
459 #endif
460 #if DEFSYS(fcntl64)
461 	{ SYS(fcntl64), 6, { ARG_FD, ARG_RND, ARG_RND, ARG_RND, ARG_RND, ARG_RND } },
462 #endif
463 #if DEFSYS(fdatasync)
464 	{ SYS(fdatasync), 1, { ARG_FD, 0, 0, 0, 0, 0 } },
465 #endif
466 #if DEFSYS(fgetxattr)
467 	{ SYS(fgetxattr), 4, { ARG_FD, ARG_EMPTY_FILENAME, ARG_PTR, ARG_LEN, 0, 0 } },
468 	{ SYS(fgetxattr), 4, { ARG_FD, ARG_DEVNULL_FILENAME, ARG_PTR, ARG_LEN, 0, 0 } },
469 	{ SYS(fgetxattr), 4, { ARG_FD, ARG_EMPTY_FILENAME, ARG_PTR_WR, ARG_LEN, 0, 0 } },
470 	{ SYS(fgetxattr), 4, { ARG_FD, ARG_DEVNULL_FILENAME, ARG_PTR_WR, ARG_LEN, 0, 0 } },
471 #endif
472 #if DEFSYS(finit_module)
473 	{ SYS(finit_module), 3, { ARG_PTR, ARG_LEN, ARG_PTR, 0, 0, 0 } },
474 #endif
475 #if DEFSYS(flistxattr)
476 	{ SYS(flistxattr), 3, { ARG_FD, ARG_PTR, ARG_LEN, 0, 0, 0 } },
477 	{ SYS(flistxattr), 3, { ARG_FD, ARG_PTR_WR, ARG_LEN, 0, 0, 0 } },
478 #endif
479 #if DEFSYS(flock)
480 	{ SYS(flock), 2, { ARG_FD, ARG_INT, 0, 0, 0, 0 } },
481 #endif
482 #if DEFSYS(fremovexattr)
483 	{ SYS(fremovexattr), 2, { ARG_FD, ARG_PTR, 0, 0, 0, 0 } },
484 #endif
485 #if DEFSYS(fsconfig)
486 #endif
487 #if defined(fsetxattr)
488 	{ SYS(fsetxattr), 5, { ARG_FD, ARG_PTR, ARG_PTR, ARG_LEN, ARG_FLAG, 0, } },
489 #endif
490 #if DEFSYS(fsmount)
491 #endif
492 #if DEFSYS(fsopen)
493 #endif
494 #if DEFSYS(fspick)
495 #endif
496 #if DEFSYS(fstat)
497 	{ SYS(fstat), 2, { ARG_FD, ARG_PTR, 0, 0, 0, 0 } },
498 	{ SYS(fstat), 2, { ARG_FD, ARG_PTR_WR, 0, 0, 0, 0 } },
499 #endif
500 #if DEFSYS(fstat64)
501 #endif
502 #if DEFSYS(fstatat)
503 	{ SYS(fstatat), 4, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_PTR, ARG_FLAG, 0, 0 } },
504 	{ SYS(fstatat), 4, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_PTR_WR, ARG_FLAG, 0, 0 } },
505 	{ SYS(fstatat), 4, { ARG_DIRFD, ARG_DEVNULL_FILENAME, ARG_PTR, ARG_FLAG, 0, 0 } },
506 	{ SYS(fstatat), 4, { ARG_DIRFD, ARG_DEVNULL_FILENAME, ARG_PTR_WR, ARG_FLAG, 0, 0 } },
507 #endif
508 #if DEFSYS(fstatat64)
509 	{ SYS(fstatat64), 4, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_PTR, ARG_FLAG, 0, 0 } },
510 	{ SYS(fstatat64), 4, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_PTR_WR, ARG_FLAG, 0, 0 } },
511 	{ SYS(fstatat64), 4, { ARG_DIRFD, ARG_DEVNULL_FILENAME, ARG_PTR, ARG_FLAG, 0, 0 } },
512 	{ SYS(fstatat64), 4, { ARG_DIRFD, ARG_DEVNULL_FILENAME, ARG_PTR_WR, ARG_FLAG, 0, 0 } },
513 #endif
514 #if DEFSYS(fstatfs)
515 	{ SYS(fstatfs), 2, { ARG_FD, ARG_PTR, 0, 0, 0, 0 } },
516 	{ SYS(fstatfs), 2, { ARG_FD, ARG_PTR_WR, 0, 0, 0, 0 } },
517 #endif
518 #if DEFSYS(fsync)
519 	{ SYS(fsync), 1, { ARG_FD, 0, 0, 0, 0, 0 } },
520 #endif
521 #if DEFSYS(ftruncate)
522 	{ SYS(ftruncate), 2, { ARG_FD, ARG_LEN, 0, 0, 0, 0 } },
523 #endif
524 #if DEFSYS(ftruncate64)
525 	{ SYS(ftruncate64), 2, { ARG_FD, ARG_LEN, 0, 0, 0, 0 } },
526 #endif
527 #if DEFSYS(futex)
528 	{ SYS(futex), 6, { ARG_FUTEX_PTR, ARG_INT, ARG_INT, ARG_FUTEX_PTR, ARG_FUTEX_PTR, ARG_INT } },
529 #endif
530 #if DEFSYS(futimens)
531 	{ SYS(futimens), 4, { ARG_FD, ARG_EMPTY_FILENAME, ARG_PTR, ARG_FLAG, 0, 0 } },
532 #endif
533 #if DEFSYS(get_kernel_syms)
534 	/* deprecated in 2.6 */
535 	{ SYS(get_kernel_syms), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
536 	{ SYS(get_kernel_syms), 1, { ARG_PTR_WR, 0, 0, 0, 0, 0 } },
537 #endif
538 #if DEFSYS(get_mempolicy)
539 	{ SYS(get_mempolicy), 5, { ARG_PTR, ARG_PTR, ARG_UINT, ARG_PTR, ARG_FLAG, 0 } },
540 	{ SYS(get_mempolicy), 5, { ARG_PTR, ARG_PTR, ARG_UINT, ARG_PTR_WR, ARG_FLAG, 0 } },
541 #endif
542 #if DEFSYS(get_robust_list)
543 	{ SYS(get_robust_list), 3, { ARG_PID, ARG_PTR, ARG_PTR, 0, 0, 0 } },
544 #endif
545 #if DEFSYS(get_thread_area)
546 	{ SYS(get_thread_area), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
547 	{ SYS(get_thread_area), 1, { ARG_PTR_WR, 0, 0, 0, 0, 0 } },
548 #endif
549 #if DEFSYS(get_tls)
550 	/* ARM OABI only */
551 #endif
552 #if DEFSYS(getcpu)
553 	{ SYS(getcpu), 3, { ARG_NON_NULL_PTR, ARG_NON_NULL_PTR, ARG_PTR, 0, 0, 0 } },
554 	{ SYS(getcpu), 3, { ARG_PTR_WR, ARG_PTR_WR, ARG_PTR_WR, 0, 0, 0 } },
555 #endif
556 #if DEFSYS(getcwd)
557 	{ SYS(getcwd), 2, { ARG_PTR, ARG_LEN, 0, 0, 0, 0 } },
558 	{ SYS(getcwd), 2, { ARG_PTR_WR, ARG_LEN, 0, 0, 0, 0 } },
559 #endif
560 #if DEFSYS(getdtablesize)
561 	/* SPARC, removed in 2.6.26 */
562 #endif
563 #if DEFSYS(getdents)
564 	{ SYS(getdents), 3, { ARG_FD, ARG_PTR, ARG_LEN, 0, 0, 0 } },
565 	{ SYS(getdents), 3, { ARG_FD, ARG_PTR_WR, ARG_LEN, 0, 0, 0 } },
566 #endif
567 #if DEFSYS(getdents64)
568 	{ SYS(getdents64), 3, { ARG_FD, ARG_PTR, ARG_LEN, 0, 0, 0 } },
569 	{ SYS(getdents64), 3, { ARG_FD, ARG_PTR_WR, ARG_LEN, 0, 0, 0 } },
570 #endif
571 #if DEFSYS(getdomainname)
572 	{ SYS(getdomainname), 2, { ARG_PTR, ARG_LEN, 0, 0, 0, 0 } },
573 	{ SYS(getdomainname), 2, { ARG_PTR_WR, ARG_LEN, 0, 0, 0, 0 } },
574 #endif
575 #if DEFSYS(getegid)
576 	/* { SYS(getegid), 0, { 0, 0, 0, 0, 0, 0 } }, */
577 #endif
578 #if DEFSYS(getegid32)
579 	/* { SYS(getegid32), 0, { 0, 0, 0, 0, 0, 0 } }, */
580 #endif
581 #if DEFSYS(geteuid)
582 	/* { SYS(geteuid), 0, { 0, 0, 0, 0, 0, 0 } }, */
583 #endif
584 #if DEFSYS(geteuid32)
585 	/* { SYS(geteuid), 0, { 0, 0, 0, 0, 0, 0 } }, */
586 #endif
587 #if DEFSYS(getgid)
588 	/* { SYS(getgid), 0, { 0, 0, 0, 0, 0, 0 } }, */
589 #endif
590 #if DEFSYS(getgid32)
591 	/* { SYS(getgid32), 0, { 0, 0, 0, 0, 0, 0 } }, */
592 #endif
593 #if DEFSYS(getgroups)
594 	{ SYS(getgroups), 2, { ARG_INT, ARG_PTR, 0, 0, 0, 0 } },
595 	{ SYS(getgroups), 2, { ARG_INT, ARG_PTR_WR, 0, 0, 0, 0 } },
596 #endif
597 #if DEFSYS(getgroups32)
598 	{ SYS(getgroups32), 2, { ARG_INT, ARG_PTR, 0, 0, 0, 0 } },
599 	{ SYS(getgroups32), 2, { ARG_INT, ARG_PTR_WR, 0, 0, 0, 0 } },
600 #endif
601 #if DEFSYS(gethostname)
602 	{ SYS(gethostname), 2, { ARG_PTR, ARG_LEN, 0, 0, 0, 0 } },
603 	{ SYS(gethostname), 2, { ARG_PTR_WR, ARG_LEN, 0, 0, 0, 0 } },
604 #endif
605 #if DEFSYS(getitimer)
606 	{ SYS(getitimer), 2, { ARG_INT, ARG_PTR, 0, 0, 0, 0 } },
607 	{ SYS(getitimer), 2, { ARG_INT, ARG_PTR_WR, 0, 0, 0, 0 } },
608 #endif
609 #if DEFSYS(getpagesize)
610 	/* { SYS(getpagesize), 0, { 0, 0, 0, 0, 0, 0 } }, */
611 #endif
612 #if DEFSYS(getpeername)
613 	{ SYS(getpeername), 3, { ARG_SOCKFD, ARG_PTR, ARG_PTR, 0, 0, 0 } },
614 	{ SYS(getpeername), 3, { ARG_SOCKFD, ARG_PTR_WR, ARG_PTR_WR, 0, 0, 0 } },
615 #endif
616 #if DEFSYS(getpgid)
617 	{ SYS(getpgid), 1, { ARG_PID, 0, 0, 0, 0, 0 } },
618 #endif
619 #if DEFSYS(getpid)
620 	/* { SYS(getpid), 0, { 0, 0, 0, 0, 0, 0 } }, */
621 #endif
622 #if DEFSYS(getppid)
623 	/* { SYS(getppid), 0, { 0, 0, 0, 0, 0, 0 } }, */
624 #endif
625 #if DEFSYS(getpriority)
626 	{ SYS(getpriority), 2, { ARG_INT, ARG_INT, 0, 0, 0, 0 } },
627 #endif
628 #if DEFSYS(getrandom)
629 	{ SYS(getrandom), 3, { ARG_PTR, ARG_INT, ARG_FLAG, 0, 0, 0 } },
630 	{ SYS(getrandom), 3, { ARG_PTR_WR, ARG_INT, ARG_FLAG, 0, 0, 0 } },
631 #endif
632 #if DEFSYS(getresgid)
633 	{ SYS(getresgid), 3, { ARG_PTR, ARG_PTR, ARG_PTR, 0, 0, 0 } },
634 	{ SYS(getresgid), 3, { ARG_PTR_WR, ARG_PTR_WR, ARG_PTR_WR, 0, 0, 0 } },
635 #endif
636 #if DEFSYS(getresgid32)
637 	{ SYS(getresgid32), 3, { ARG_PTR, ARG_PTR, ARG_PTR, 0, 0, 0 } },
638 	{ SYS(getresgid32), 3, { ARG_PTR_WR, ARG_PTR_WR, ARG_PTR_WR, 0, 0, 0 } },
639 #endif
640 #if DEFSYS(getresuid)
641 	{ SYS(getresuid), 3, { ARG_PTR, ARG_PTR, ARG_PTR, 0, 0, 0 } },
642 	{ SYS(getresuid), 3, { ARG_PTR_WR, ARG_PTR_WR, ARG_PTR_WR, 0, 0, 0 } },
643 #endif
644 #if DEFSYS(getresuid32)
645 	{ SYS(getresuid32), 3, { ARG_PTR, ARG_PTR, ARG_PTR, 0, 0, 0 } },
646 	{ SYS(getresuid32), 3, { ARG_PTR_WR, ARG_PTR_WR, ARG_PTR_WR, 0, 0, 0 } },
647 #endif
648 #if DEFSYS(getrlimit)
649 	{ SYS(getrlimit), 2, { ARG_RND, ARG_PTR, 0, 0, 0, 0 } },
650 	{ SYS(getrlimit), 2, { ARG_INT, ARG_PTR, 0, 0, 0, 0 } },
651 	{ SYS(getrlimit), 2, { ARG_RND, ARG_PTR_WR, 0, 0, 0, 0 } },
652 	{ SYS(getrlimit), 2, { ARG_INT, ARG_PTR_WR, 0, 0, 0, 0 } },
653 #endif
654 #if DEFSYS(getrusage)
655 	{ SYS(getrusage), 2, { ARG_RND, ARG_PTR, 0, 0, 0, 0 } },
656 	{ SYS(getrusage), 2, { ARG_INT, ARG_PTR, 0, 0, 0, 0 } },
657 	{ SYS(getrusage), 2, { ARG_RND, ARG_PTR_WR, 0, 0, 0, 0 } },
658 	{ SYS(getrusage), 2, { ARG_INT, ARG_PTR_WR, 0, 0, 0, 0 } },
659 #endif
660 #if DEFSYS(getsid)
661 	{ SYS(getsid), 1, { ARG_PID, 0, 0, 0, 0, 0 } },
662 #endif
663 #if DEFSYS(getsockname)
664 	{ SYS(getsockname), 3, { ARG_SOCKFD, ARG_PTR | ARG_STRUCT_SOCKADDR, ARG_PTR, 0, 0, 0 } },
665 	{ SYS(getsockname), 3, { ARG_SOCKFD, ARG_PTR | ARG_STRUCT_SOCKADDR, ARG_PTR_WR, 0, 0, 0 } },
666 #endif
667 #if DEFSYS(getsockopt)
668 	{ SYS(getsockopt), 5, { ARG_SOCKFD, ARG_INT, ARG_INT, ARG_PTR, ARG_PTR, 0 } },
669 	{ SYS(getsockopt), 5, { ARG_SOCKFD, ARG_INT, ARG_INT, ARG_PTR_WR, ARG_PTR, 0 } },
670 	{ SYS(getsockopt), 5, { ARG_SOCKFD, ARG_INT, ARG_INT, ARG_PTR, ARG_PTR_WR, 0 } },
671 	{ SYS(getsockopt), 5, { ARG_SOCKFD, ARG_INT, ARG_INT, ARG_PTR_WR, ARG_PTR_WR, 0 } },
672 #endif
673 #if DEFSYS(gettid)
674 	/* { SYS(gettid), 0, { 0, 0, 0, 0, 0, 0 } }, */
675 #endif
676 #if DEFSYS(getuid)
677 	/* { SYS(getuid), 0, { 0, 0, 0, 0, 0, 0 } }, */
678 #endif
679 #if DEFSYS(getuid32)
680 	/* { SYS(getuid32), 0, { 0, 0, 0, 0, 0, 0 } }, */
681 #endif
682 #if DEFSYS(getunwind)
683 	/* IA-64-specific, obsolete too */
684 	{ SYS(getunwind), 2, { ARG_PTR, ARG_LEN, 0, 0, 0, 0 } },
685 	{ SYS(getunwind), 2, { ARG_PTR_WR, ARG_LEN, 0, 0, 0, 0 } },
686 #endif
687 #if DEFSYS(gettimeofday)
688 	{ SYS(gettimeofday), 2, { ARG_NON_NULL_PTR, ARG_NON_NULL_PTR, 0, 0, 0, 0 } },
689 	{ SYS(gettimeofday), 2, { ARG_PTR_WR, ARG_NON_NULL_PTR, 0, 0, 0, 0 } },
690 	{ SYS(gettimeofday), 2, { ARG_NON_NULL_PTR, ARG_PTR_WR, 0, 0, 0, 0 } },
691 	{ SYS(gettimeofday), 2, { ARG_PTR_WR, ARG_PTR_WR, 0, 0, 0, 0 } },
692 #endif
693 #if DEFSYS(getxattr)
694 	{ SYS(getxattr), 4, { ARG_EMPTY_FILENAME, ARG_PTR, ARG_PTR, ARG_LEN, 0, 0 } },
695 	{ SYS(getxattr), 4, { ARG_DEVNULL_FILENAME, ARG_PTR, ARG_PTR, ARG_LEN, 0, 0 } },
696 	{ SYS(getxattr), 4, { ARG_EMPTY_FILENAME, ARG_PTR, ARG_PTR_WR, ARG_LEN, 0, 0 } },
697 	{ SYS(getxattr), 4, { ARG_DEVNULL_FILENAME, ARG_PTR, ARG_PTR_WR, ARG_LEN, 0, 0 } },
698 #endif
699 #if DEFSYS(getxgid)
700 	/* Alpha only */
701 #endif
702 #if DEFSYS(getxpid)
703 	/* Alpha only */
704 #endif
705 #if DEFSYS(getxuid)
706 	/* Alpha only */
707 #endif
708 #if DEFSYS(init_module)
709 	{ SYS(init_module), 3, { ARG_PTR, ARG_LEN, ARG_PTR } },
710 #endif
711 #if DEFSYS(inotify_add_watch)
712 	{ SYS(inotify_add_watch), 3, { ARG_FD, ARG_EMPTY_FILENAME, ARG_UINT, 0, 0, 0 } },
713 	{ SYS(inotify_add_watch), 3, { ARG_FD, ARG_DEVNULL_FILENAME, ARG_UINT, 0, 0, 0 } },
714 #endif
715 #if DEFSYS(inotify_init)
716 	/* { SYS(inotify_init), 0, { 0, 0, 0, 0, 0, 0 } }, */
717 #endif
718 #if DEFSYS(inotify_init1)
719 	{ SYS(inotify_init1), 3, { ARG_FLAG, 0, 0, 0, 0, 0 } },
720 #endif
721 #if DEFSYS(inotify_rm_watch)
722 	{ SYS(inotify_rm_watch), 2, { ARG_FD, ARG_INT, 0, 0, 0, 0 } },
723 #endif
724 #if DEFSYS(io_cancel)
725 	{ SYS(io_cancel), 3, { ARG_INT, ARG_PTR, ARG_PTR, 0, 0, 0 } },
726 #endif
727 #if DEFSYS(io_destroy)
728 	{ SYS(io_destroy), 1, { ARG_INT, 0, 0, 0, 0, 0 } },
729 #endif
730 #if DEFSYS(io_getevents)
731 	{ SYS(io_getevents), 5, { ARG_INT, ARG_INT, ARG_INT, ARG_PTR, ARG_PTR, 0 } },
732 #endif
733 #if DEFSYS(io_pgetevents)
734 	/* TODO */
735 #endif
736 #if DEFSYS(io_setup)
737 	{ SYS(io_setup), 2, { ARG_UINT, ARG_PTR, 0, 0, 0, 0 } },
738 #endif
739 #if DEFSYS(io_submit)
740 	{ SYS(io_setup), 3, { ARG_UINT, ARG_INT, ARG_PTR, 0, 0, 0 } },
741 #endif
742 #if DEFSYS(io_uring_enter)
743 #endif
744 #if DEFSYS(io_uring_register)
745 #endif
746 #if DEFSYS(io_uring_setup)
747 #endif
748 #if DEFSYS(ioctl)
749 	{ SYS(ioctl), 4, { ARG_FD, ARG_UINT, ARG_PTR, ARG_PTR, 0, 0 } },
750 #endif
751 #if DEFSYS(ioperm)
752 	{ SYS(ioperm), 3, { ARG_UINT, ARG_UINT, ARG_INT, 0, 0, 0 } },
753 #endif
754 #if DEFSYS(iopl)
755 	{ SYS(iopl), 1, { ARG_INT, 0, 0, 0, 0, 0 } },
756 #endif
757 #if DEFSYS(ioprio_get)
758 	{ SYS(ioprio_get), 2, { ARG_INT, ARG_INT, 0, 0, 0, 0 } },
759 #endif
760 #if DEFSYS(ioprio_set)
761 	{ SYS(ioprio_set), 3, { ARG_INT, ARG_INT, ARG_INT, 0, 0, 0 } },
762 #endif
763 #if DEFSYS(ipc)
764 	{ SYS(ipc), 6, { ARG_UINT, ARG_INT, ARG_INT, ARG_INT, ARG_PTR, ARG_UINT } },
765 #endif
766 #if DEFSYS(kcmp)
767 	{ SYS(kcmp), 5, { ARG_PID, ARG_PID, ARG_INT, ARG_UINT, ARG_UINT, 0 } },
768 #endif
769 #if DEFSYS(kern_features)
770 	/* SPARC64 only */
771 #endif
772 #if DEFSYS(kexec_file_load)
773 	/* { SYS(kexec_file_load), 5, { ARG_FD, ARG_FD, ARG_UINT, ARG_PTR, ARG_FLAG, 0 } }, */
774 #endif
775 #if DEFSYS(kexec_load)
776 	/* { SYS(kexec_load), 4, { ARG_UINT, ARG_UINT, ARG_PTR, ARG_FLAG, 0, 0 } }, */
777 #endif
778 #if DEFSYS(keyctl)
779 	{ SYS(keyctl), 6, { ARG_INT, ARG_UINT, ARG_UINT, ARG_UINT, ARG_UINT, ARG_UINT } },
780 #endif
781 #if DEFSYS(kill)
782 	/* { SYS(kill), ARG_PID, ARG_INT, 0, 0, 0, 0 } }, */
783 #endif
784 #if DEFSYS(landlock_add_rule)
785 	{ SYS(landlock_create_ruleset), 4, { ARG_FD, ARG_INT, ARG_PTR, ARG_FLAG, 0, 0 } },
786 #endif
787 #if DEFSYS(landlock_create_ruleset)
788 	{ SYS(landlock_create_ruleset), 3, { ARG_PTR, ARG_LEN, ARG_FLAG, 0, 0, 0 } },
789 #endif
790 #if DEFSYS(landlock_restrict_self)
791 	{ SYS(landlock_restrict_self), 2, { ARG_FD, ARG_FLAG, 0, 0, 0, 0 } },
792 #endif
793 #if DEFSYS(lchown)
794 	{ SYS(lchown), 3, { ARG_EMPTY_FILENAME, ARG_INT, ARG_INT, 0, 0, 0 } },
795 #endif
796 #if DEFSYS(lchown32)
797 	{ SYS(lchown32), 3, { ARG_EMPTY_FILENAME, ARG_INT, ARG_INT, 0, 0, 0 } },
798 #endif
799 #if DEFSYS(link)
800 	{ SYS(link), 2, { ARG_EMPTY_FILENAME, ARG_PTR, 0, 0, 0, 0 } },
801 #endif
802 #if DEFSYS(linkat)
803 	{ SYS(linkat), 5, { ARG_FD, ARG_EMPTY_FILENAME, ARG_FD, ARG_EMPTY_FILENAME, ARG_INT, 0 } },
804 #endif
805 #if DEFSYS(listen)
806 	{ SYS(listen), 2, { ARG_SOCKFD, ARG_INT, 0, 0, 0, 0 } },
807 #endif
808 #if DEFSYS(listxattr)
809 	{ SYS(listxattr), 3, { ARG_EMPTY_FILENAME, ARG_PTR, ARG_LEN, 0, 0, 0 } },
810 	{ SYS(listxattr), 3, { ARG_EMPTY_FILENAME, ARG_PTR_WR, ARG_LEN, 0, 0, 0 } },
811 	{ SYS(listxattr), 3, { ARG_DEVNULL_FILENAME, ARG_PTR, ARG_LEN, 0, 0, 0 } },
812 	{ SYS(listxattr), 3, { ARG_DEVNULL_FILENAME, ARG_PTR_WR, ARG_LEN, 0, 0, 0 } },
813 #endif
814 #if DEFSYS(llistxattr)
815 	{ SYS(llistxattr), 3, { ARG_EMPTY_FILENAME, ARG_PTR_WR, ARG_LEN, 0, 0, 0 } },
816 	{ SYS(llistxattr), 3, { ARG_EMPTY_FILENAME, ARG_PTR, ARG_LEN, 0, 0, 0 } },
817 	{ SYS(llistxattr), 3, { ARG_DEVNULL_FILENAME, ARG_PTR_WR, ARG_LEN, 0, 0, 0 } },
818 	{ SYS(llistxattr), 3, { ARG_DEVNULL_FILENAME, ARG_PTR, ARG_LEN, 0, 0, 0 } },
819 #endif
820 #if DEFSYS(lookup_dcookie)
821 	{ SYS(lookup_dcookie), 3, { ARG_UINT, ARG_PTR, ARG_LEN, 0, 0, 0 } },
822 	{ SYS(lookup_dcookie), 3, { ARG_UINT, ARG_PTR_WR, ARG_LEN, 0, 0, 0 } },
823 #endif
824 #if DEFSYS(lremovexattr)
825 	{ SYS(lremovexattr), 3, { ARG_EMPTY_FILENAME, ARG_PTR, 0, 0, 0, 0 } },
826 #endif
827 #if DEFSYS(lseek)
828 	{ SYS(lseek), 3, { ARG_FD, ARG_UINT, ARG_INT, 0, 0, 0 } },
829 #endif
830 #if DEFSYS(lsetxattr)
831 	{ SYS(lsetxattr), 5, { ARG_EMPTY_FILENAME, ARG_PTR, ARG_PTR, ARG_LEN, ARG_INT, 0 } },
832 #endif
833 #if DEFSYS(lstat)
834 	{ SYS(lstat), 2, { ARG_EMPTY_FILENAME, ARG_PTR, 0, 0, 0, 0 } },
835 	{ SYS(lstat), 2, { ARG_EMPTY_FILENAME, ARG_PTR_WR, 0, 0, 0, 0 } },
836 	{ SYS(lstat), 2, { ARG_DEVNULL_FILENAME, ARG_PTR, 0, 0, 0, 0 } },
837 	{ SYS(lstat), 2, { ARG_DEVNULL_FILENAME, ARG_PTR_WR, 0, 0, 0, 0 } },
838 #endif
839 #if DEFSYS(lstat64)
840 	{ SYS(lstat64), 2, { ARG_EMPTY_FILENAME, ARG_PTR, 0, 0, 0, 0 } },
841 	{ SYS(lstat64), 2, { ARG_EMPTY_FILENAME, ARG_PTR_WR, 0, 0, 0, 0 } },
842 	{ SYS(lstat64), 2, { ARG_DEVNULL_FILENAME, ARG_PTR, 0, 0, 0, 0 } },
843 	{ SYS(lstat64), 2, { ARG_DEVNULL_FILENAME, ARG_PTR_WR, 0, 0, 0, 0 } },
844 #endif
845 #if DEFSYS(madvise)
846 	{ SYS(madvise), 3, { ARG_PTR, ARG_LEN, ARG_INT, 0, 0, 0 } },
847 #endif
848 #if DEFSYS(mbind)
849 	{ SYS(mbind), 6, { ARG_PTR, ARG_UINT, ARG_INT, ARG_PTR, ARG_UINT, ARG_UINT } },
850 #endif
851 #if DEFSYS(memory_ordering)
852 	/* SPARC64 only */
853 #endif
854 #if DEFSYS(membarrier)
855 	{ SYS(membarrier), 2, { ARG_INT, ARG_FLAG, 0, 0, 0, 0 } },
856 #endif
857 #if DEFSYS(memfd_create)
858 	{ SYS(memfd_create), 2, { ARG_EMPTY_FILENAME, ARG_UINT, 0, 0, 0, 0 } },
859 #endif
860 #if DEFSYS(migrate_pages)
861 	{ SYS(migrate_pages), 4, { ARG_PID, ARG_UINT, ARG_PTR, ARG_PTR, 0, 0 } },
862 #endif
863 #if DEFSYS(mincore)
864 	{ SYS(mincore), 3, { ARG_PTR, ARG_LEN, ARG_PTR, 0, 0, 0 } },
865 	{ SYS(mincore), 3, { ARG_PTR, ARG_LEN, ARG_PTR_WR, 0, 0, 0 } },
866 #endif
867 #if DEFSYS(mkdir)
868 	{ SYS(mkdir), 2, { ARG_EMPTY_FILENAME, ARG_MODE, 0, 0, 0, 0 } },
869 #endif
870 #if DEFSYS(mkdirat)
871 	{ SYS(mkdirat), 3, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_MODE, 0, 0, 0 } },
872 #endif
873 #if DEFSYS(mknod)
874 	{ SYS(mknod), 3, { ARG_EMPTY_FILENAME, ARG_MODE, ARG_UINT, 0, 0, 0 } },
875 #endif
876 #if DEFSYS(mknodat)
877 	{ SYS(mknodat), 4, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_MODE, ARG_UINT, 0, 0 } },
878 #endif
879 #if DEFSYS(mlock)
880 	{ SYS(mlock), 2, { ARG_PTR, ARG_LEN, 0, 0, 0, 0 } },
881 #endif
882 #if DEFSYS(mlock2)
883 	{ SYS(mlock2), 2, { ARG_PTR, ARG_LEN, ARG_FLAG, 0, 0, 0 } },
884 #endif
885 #if DEFSYS(mlockall)
886 	{ SYS(mlockall), 1, { ARG_FLAG, 0, 0, 0, 0, 0 } },
887 #endif
888 #if DEFSYS(mmap)
889 	{ SYS(mmap), 6, { ARG_PTR, ARG_LEN, ARG_INT, ARG_FLAG, ARG_FD, ARG_UINT } },
890 #endif
891 #if DEFSYS(mmap2)
892 	{ SYS(mmap2), 6, { ARG_PTR, ARG_LEN, ARG_INT, ARG_FLAG, ARG_FD, ARG_UINT } },
893 #endif
894 #if DEFSYS(mmap_pgoff)
895 	{ SYS(mmap_pgoff), 6, { ARG_PTR, ARG_LEN, ARG_INT, ARG_FLAG, ARG_FD, ARG_UINT } },
896 #endif
897 #if DEFSYS(modify_ldt)
898 	{ SYS(modify_ldt), 3, { ARG_INT, ARG_PTR, ARG_LEN, 0, 0, 0 } },
899 	{ SYS(modify_ldt), 3, { ARG_INT, ARG_PTR_WR, ARG_LEN, 0, 0, 0 } },
900 #endif
901 #if DEFSYS(mount)
902 	{ SYS(mount), 5, { ARG_EMPTY_FILENAME, ARG_EMPTY_FILENAME, ARG_PTR, ARG_UINT, ARG_UINT, 0 } },
903 #endif
904 #if DEFSYS(move_mount)
905 	//{ SYS(move_mount), 1, { 0, 0, 0, 0, 0, 0 } },
906 #endif
907 #if DEFSYS(move_pages)
908 	{ SYS(move_pages), 6, { ARG_PID, ARG_UINT, ARG_PTR, ARG_PTR, ARG_PTR, ARG_FLAG } },
909 #endif
910 #if DEFSYS(mprotect)
911 	{ SYS(mprotect), 3, { ARG_PTR, ARG_LEN, ARG_UINT, 0, 0, 0 } },
912 #endif
913 #if DEFSYS(mq_close)
914 	{ SYS(mq_close), 1, { ARG_INT, 0, 0, 0, 0, 0 } },
915 #endif
916 #if DEFSYS(mq_getsetattr)
917 	{ SYS(mq_getsetattr), 3, { ARG_INT, ARG_PTR, ARG_PTR, 0, 0, 0 } },
918 #endif
919 #if DEFSYS(mq_notify)
920 	{ SYS(mq_notify), 2, { ARG_INT, ARG_PTR, 0, 0, 0, 0 } },
921 #endif
922 #if DEFSYS(mq_open)
923 	{ SYS(mq_open), 4, { ARG_EMPTY_FILENAME, ARG_FLAG, ARG_MODE, ARG_PTR, 0, 0 } },
924 	{ SYS(mq_open), 4, { ARG_DEVNULL_FILENAME, ARG_FLAG, ARG_MODE, ARG_PTR, 0, 0 } },
925 #endif
926 #if DEFSYS(mq_receive)
927 	{ SYS(mq_receive), 4, { ARG_INT, ARG_PTR, ARG_LEN, ARG_INT, 0, 0 } },
928 	{ SYS(mq_receive), 4, { ARG_INT, ARG_PTR_WR, ARG_LEN, ARG_INT, 0, 0 } },
929 #endif
930 #if DEFSYS(mq_send)
931 	{ SYS(mq_send), 4, { ARG_INT, ARG_PTR, ARG_LEN, ARG_UINT, 0, 0 } },
932 #endif
933 #if DEFSYS(mq_timedreceive)
934 	{ SYS(mq_timedreceive), 4, { ARG_INT, ARG_PTR_WR, ARG_LEN, ARG_PTR, 0, 0 } },
935 #endif
936 #if DEFSYS(mq_timedsend)
937 	{ SYS(mq_timedsend), 4, { ARG_INT, ARG_PTR, ARG_LEN, ARG_INT, 0, 0 } },
938 #endif
939 #if DEFSYS(mq_unlink)
940 	{ SYS(mq_unlink), 1, { ARG_EMPTY_FILENAME, 0, 0, 0, 0, 0 } },
941 #endif
942 #if DEFSYS(mremap)
943 	{ SYS(mremap), 5, { ARG_PTR, ARG_LEN, ARG_PTR, ARG_LEN, ARG_FLAG, ARG_PTR } },
944 #endif
945 #if DEFSYS(msgctl)
946 	{ SYS(msgctl), 3, { ARG_INT, ARG_INT, ARG_PTR, 0, 0, 0 } },
947 #endif
948 #if DEFSYS(msgget)
949 	{ SYS(msgget), 2, { ARG_INT, ARG_INT, 0, 0, 0, 0 } },
950 #endif
951 #if DEFSYS(msgrcv)
952 	{ SYS(msgrcv), 5, { ARG_INT, ARG_PTR, ARG_LEN, ARG_INT, ARG_INT, 0 } },
953 	{ SYS(msgrcv), 5, { ARG_INT, ARG_PTR_WR, ARG_LEN, ARG_INT, ARG_INT, 0 } },
954 #endif
955 #if DEFSYS(msgsnd)
956 	{ SYS(msgsnd), 4, { ARG_INT, ARG_PTR, ARG_LEN, ARG_INT, 0, 0 } },
957 #endif
958 #if DEFSYS(msync)
959 	{ SYS(msync), 3, { ARG_PTR, ARG_LEN, ARG_FLAG, 0, 0, 0 } },
960 #endif
961 #if DEFSYS(munlock)
962 	{ SYS(munlock), 2, { ARG_PTR, ARG_LEN, 0, 0, 0, 0 } },
963 #endif
964 #if DEFSYS(munlockall)
965 	{ SYS(munlockall), 1, { ARG_INT, 0, 0, 0, 0, 0 } },
966 #endif
967 #if DEFSYS(munmap)
968 	//{ SYS(munmap), 2, { ARG_PTR, ARG_LEN, 0, 0, 0, 0 } },
969 #endif
970 #if DEFSYS(name_to_handle_at)
971 	{ SYS(name_to_handle_at), 5, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_PTR, ARG_PTR, ARG_FLAG } },
972 	{ SYS(name_to_handle_at), 5, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_PTR_WR, ARG_PTR, ARG_FLAG } },
973 #endif
974 #if DEFSYS(nanosleep)
975 	{ SYS(nanosleep), 2, { ARG_PTR, ARG_PTR, 0, 0, 0, 0 } },
976 #endif
977 #if DEFSYS(newfstatat)
978 	/* TODO */
979 #endif
980 #if DEFSYS(nfsservctl)
981 	{ SYS(nfsservctl), 3, { ARG_INT, ARG_PTR, ARG_PTR, 0, 0, 0 } },
982 	{ SYS(nfsservctl), 3, { ARG_INT, ARG_PTR, ARG_PTR_WR, 0, 0, 0 } },
983 #endif
984 #if DEFSYS(nice)
985 	{ SYS(nice), 1, { ARG_INT, 0, 0, 0, 0, 0 } },
986 #endif
987 #if DEFSYS(old_adjtimex)
988 	/* TODO */
989 #endif
990 #if DEFSYS(old_getrlimit)
991 	/* TODO */
992 #endif
993 #if DEFSYS(oldolduname)
994 	/* TODO */
995 #endif
996 #if DEFSYS(oldstat)
997 	/* TODO */
998 #endif
999 #if DEFSYS(oldumount)
1000 	/* TODO */
1001 #endif
1002 #if DEFSYS(olduname)
1003 	/* TODO */
1004 #endif
1005 #if DEFSYS(open)
1006 	{ SYS(open), 3, { ARG_EMPTY_FILENAME, ARG_FLAG, ARG_MODE, 0, 0, 0 } },
1007 #endif
1008 #if DEFSYS(open_by_handle_at)
1009 	{ SYS(open_by_handle_at), 3, { ARG_FD, ARG_PTR, ARG_FLAG, 0, 0, 0 } },
1010 #endif
1011 #if DEFSYS(open_tree)
1012 	//{ SYS(open_tree), 1, { 0, 0, 0, 0, 0, 0 } },
1013 #endif
1014 #if DEFSYS(openat)
1015 	{ SYS(openat), 4, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_FLAG, ARG_MODE, 0, 0 } },
1016 #endif
1017 #if DEFSYS(openat2)
1018 	{ SYS(openat2), 4, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_PTR, ARG_LEN, 0, 0 } },
1019 #endif
1020 #if DEFSYS(or1k_atomic)
1021 	/* OpenRISC 1000 only */
1022 #endif
1023 #if DEFSYS(pause)
1024 	/* { SYS(pause), 0, { 0, 0, 0, 0, 0, 0 } }, */
1025 #endif
1026 #if DEFSYS(pciconfig_iobase)
1027 	/* { SYS(pciconfig_iobase), 3, { ARG_UINT, ARG_UINT, ARG_UINT, 0, 0, 0 } }, */
1028 #endif
1029 #if DEFSYS(pciconfig_read)
1030 	/* { SYS(pciconfig_read), 3, { ARG_UINT, ARG_UINT, ARG_UINT, ARG_LEN, ARG_PTR, 0 } }, */
1031 #endif
1032 #if DEFSYS(pciconfig_write)
1033 	/* { SYS(pciconfig_write), 3, { ARG_UINT, ARG_UINT, ARG_UINT, ARG_LEN, ARG_PTR, 0 } }, */
1034 #endif
1035 #if DEFSYS(perf_event_open)
1036 	{ SYS(perf_event_open), 5, { ARG_PTR, ARG_PID, ARG_INT, ARG_INT, ARG_FLAG, 0 } },
1037 #endif
1038 #if DEFSYS(personality)
1039 	{ SYS(personality), 1, { ARG_UINT, 0, 0, 0, 0, 0 } },
1040 #endif
1041 #if DEFSYS(pidfd_getfd)
1042 	{ SYS(pidfd_getfd), 3, { ARG_INT, ARG_INT, ARG_FLAG, 0, 0, 0 } },
1043 #endif
1044 #if DEFSYS(pidfd_open)
1045 	{ SYS(pidfd_open), 2, { ARG_PID, ARG_FLAG, 0, 0, 0, 0 } },
1046 #endif
1047 #if DEFSYS(pidfd_send_signal)
1048 	{ SYS(pidfd_send_signal), 4, { ARG_INT, ARG_INT, ARG_PTR, ARG_FLAG, 0, 0 } },
1049 #endif
1050 #if DEFSYS(pipe)
1051 	{ SYS(pipe), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
1052 	{ SYS(pipe), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
1053 #endif
1054 #if DEFSYS(pipe2)
1055 	{ SYS(pipe2), 2, { ARG_PTR, ARG_FLAG, 0, 0, 0, 0 } },
1056 #endif
1057 #if DEFSYS(pivot_root)
1058 	{ SYS(pivot_root), 2, { ARG_EMPTY_FILENAME, ARG_EMPTY_FILENAME, 0, 0, 0, 0 } },
1059 	{ SYS(pivot_root), 2, { ARG_DEVNULL_FILENAME, ARG_EMPTY_FILENAME, 0, 0, 0, 0 } },
1060 	{ SYS(pivot_root), 2, { ARG_EMPTY_FILENAME, ARG_DEVNULL_FILENAME, 0, 0, 0, 0 } },
1061 	{ SYS(pivot_root), 2, { ARG_DEVNULL_FILENAME, ARG_DEVNULL_FILENAME, 0, 0, 0, 0 } },
1062 #endif
1063 #if DEFSYS(pkey_alloc)
1064 	{ SYS(pkey_alloc), 2, { ARG_FLAG, ARG_UINT, 0, 0, 0, 0 } },
1065 #endif
1066 #if DEFSYS(pkey_free)
1067 	{ SYS(pkey_free), 1, { ARG_INT, 0, 0, 0, 0, 0 } },
1068 #endif
1069 #if DEFSYS(pkey_get)
1070 	{ SYS(pkey_get), 1, { ARG_INT, 0, 0, 0, 0, 0 } },
1071 #endif
1072 #if DEFSYS(pkey_mprotect)
1073 	{ SYS(pkey_mprotect), 3, { ARG_PTR, ARG_LEN, ARG_INT, 0, 0, 0 } },
1074 #endif
1075 #if DEFSYS(pkey_set)
1076 	{ SYS(pkey_set), 2, { ARG_INT, ARG_INT, 0, 0, 0, 0 } },
1077 #endif
1078 #if DEFSYS(poll)
1079 	{ SYS(poll), 3, { ARG_PTR, ARG_INT, ARG_INT, 0, 0, 0 } },
1080 #endif
1081 #if DEFSYS(ppoll)
1082 	{ SYS(ppoll), 4, { ARG_PTR, ARG_INT, ARG_PTR, ARG_PTR, 0, 0 } },
1083 #endif
1084 #if DEFSYS(prctl)
1085 	{ SYS(prctl), 5, { ARG_INT, ARG_UINT, ARG_UINT, ARG_UINT, ARG_UINT, 0 } },
1086 #endif
1087 #if DEFSYS(pread)
1088 	{ SYS(pread), 4, { ARG_FD, ARG_PTR, ARG_LEN, ARG_UINT, 0, 0 } },
1089 	{ SYS(pread), 4, { ARG_FD, ARG_PTR_WR, ARG_LEN, ARG_UINT, 0, 0 } },
1090 #endif
1091 #if DEFSYS(pread64)
1092 	{ SYS(pread64), 4, { ARG_FD, ARG_PTR, ARG_LEN, ARG_UINT, 0, 0 } },
1093 	{ SYS(pread64), 4, { ARG_FD, ARG_PTR_WR, ARG_LEN, ARG_UINT, 0, 0 } },
1094 #endif
1095 #if DEFSYS(preadv)
1096 	{ SYS(preadv), 4, { ARG_FD, ARG_PTR, ARG_INT, ARG_UINT, 0, 0 } },
1097 	{ SYS(preadv), 4, { ARG_FD, ARG_PTR_WR, ARG_INT, ARG_UINT, 0, 0 } },
1098 #endif
1099 #if DEFSYS(preadv2)
1100 	{ SYS(preadv2), 4, { ARG_FD, ARG_PTR, ARG_INT, ARG_UINT, ARG_FLAG, 0 } },
1101 	{ SYS(preadv2), 4, { ARG_FD, ARG_PTR_WR, ARG_INT, ARG_UINT, ARG_FLAG, 0 } },
1102 #endif
1103 #if DEFSYS(prlimit)
1104 	{ SYS(prlimit), 2, { ARG_INT, ARG_PTR, ARG_PTR, 0, 0, 0 } },
1105 	{ SYS(prlimit), 2, { ARG_INT, ARG_PTR_WR, ARG_PTR, 0, 0, 0 } },
1106 	{ SYS(prlimit), 2, { ARG_INT, ARG_PTR, ARG_PTR_WR, 0, 0, 0 } },
1107 	{ SYS(prlimit), 2, { ARG_INT, ARG_PTR_WR, ARG_PTR_WR, 0, 0, 0 } },
1108 #endif
1109 #if DEFSYS(prlimit64)
1110 	{ SYS(prlimit64), 2, { ARG_INT, ARG_PTR, ARG_PTR, 0, 0, 0 } },
1111 	{ SYS(prlimit64), 2, { ARG_INT, ARG_PTR_WR, ARG_PTR, 0, 0, 0 } },
1112 	{ SYS(prlimit64), 2, { ARG_INT, ARG_PTR, ARG_PTR_WR, 0, 0, 0 } },
1113 	{ SYS(prlimit64), 2, { ARG_INT, ARG_PTR_WR, ARG_PTR_WR, 0, 0, 0 } },
1114 #endif
1115 #if DEFSYS(process_madvise)
1116 	{ SYS(process_madvise), 6, { ARG_INT, ARG_PID, ARG_PTR, ARG_LEN, ARG_INT, ARG_FLAG } },
1117 #endif
1118 #if DEFSYS(process_vm_readv)
1119 	{ SYS(process_vm_readv), 6, { ARG_PID, ARG_PTR, ARG_UINT, ARG_PTR, ARG_UINT, ARG_UINT } },
1120 	{ SYS(process_vm_readv), 6, { ARG_PID, ARG_PTR, ARG_UINT, ARG_PTR_WR, ARG_UINT, ARG_UINT } },
1121 #endif
1122 #if DEFSYS(process_vm_writev)
1123 	{ SYS(process_vm_writev), 6, { ARG_PID, ARG_PTR, ARG_UINT, ARG_PTR, ARG_UINT, ARG_UINT } },
1124 #endif
1125 #if DEFSYS(pselect)
1126 	{ SYS(pselect), 6, { ARG_INT, ARG_PTR, ARG_PTR, ARG_PTR, ARG_PTR, ARG_PTR } },
1127 #endif
1128 #if DEFSYS(ptrace)
1129 	{ SYS(ptrace), 4, { ARG_INT, ARG_PID, ARG_PTR, ARG_PTR, 0, 0 } },
1130 #endif
1131 #if DEFSYS(pwrite)
1132 	{ SYS(pwrite), 4, { ARG_FD, ARG_PTR, ARG_LEN, ARG_UINT, 0, 0 } },
1133 #endif
1134 #if DEFSYS(pwritev)
1135 	{ SYS(pwritev), 4, { ARG_FD, ARG_PTR, ARG_INT, ARG_UINT, 0, 0 } },
1136 #endif
1137 #if DEFSYS(pwritev2)
1138 	{ SYS(pwritev2), 4, { ARG_FD, ARG_PTR, ARG_INT, ARG_UINT, ARG_FLAG, 0 } },
1139 #endif
1140 #if DEFSYS(query_module)
1141 	{ SYS(query_module), 5, { ARG_PTR, ARG_INT, ARG_PTR, ARG_LEN, ARG_PTR, 0 } },
1142 	{ SYS(query_module), 5, { ARG_PTR, ARG_INT, ARG_PTR_WR, ARG_LEN, ARG_PTR, 0 } },
1143 	{ SYS(query_module), 5, { ARG_PTR, ARG_INT, ARG_PTR, ARG_LEN, ARG_PTR_WR, 0 } },
1144 	{ SYS(query_module), 5, { ARG_PTR, ARG_INT, ARG_PTR_WR, ARG_LEN, ARG_PTR, 0 } },
1145 #endif
1146 #if DEFSYS(quotactl)
1147 	{ SYS(quotactl), 4, { ARG_INT, ARG_PTR, ARG_INT, ARG_PTR, 0, 0 } },
1148 #endif
1149 #if DEFSYS(quotactl_fd)
1150 	{ SYS(quotactl_fd), 4, { ARG_INT, ARG_INT, ARG_INT, ARG_PTR, 0, 0 } },
1151 #endif
1152 #if DEFSYS(read)
1153 	{ SYS(read), 3, { ARG_FD, ARG_PTR, ARG_LEN, 0, 0, 0 } },
1154 	{ SYS(read), 3, { ARG_FD, ARG_PTR_WR, ARG_LEN, 0, 0, 0 } },
1155 #endif
1156 #if DEFSYS(readahead)
1157 	{ SYS(readahead), 3, { ARG_FD, ARG_UINT, ARG_LEN, 0, 0, 0 } },
1158 #endif
1159 #if DEFSYS(readdir)
1160 	{ SYS(readdir), 3, { ARG_FD, ARG_PTR, ARG_LEN, 0, 0, 0 } },
1161 	{ SYS(readdir), 3, { ARG_FD, ARG_PTR_WR, ARG_LEN, 0, 0, 0 } },
1162 #endif
1163 #if DEFSYS(readlink)
1164 	{ SYS(readlink), 3, { ARG_EMPTY_FILENAME, ARG_PTR, ARG_LEN, 0, 0, 0 } },
1165 	{ SYS(readlink), 3, { ARG_EMPTY_FILENAME, ARG_PTR_WR, ARG_LEN, 0, 0, 0 } },
1166 	{ SYS(readlink), 3, { ARG_DEVNULL_FILENAME, ARG_PTR, ARG_LEN, 0, 0, 0 } },
1167 	{ SYS(readlink), 3, { ARG_DEVNULL_FILENAME, ARG_PTR_WR, ARG_LEN, 0, 0, 0 } },
1168 #endif
1169 #if DEFSYS(readlinkat)
1170 	{ SYS(readlinkat), 4, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_PTR, ARG_LEN, 0, 0 } },
1171 	{ SYS(readlinkat), 4, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_PTR_WR, ARG_LEN, 0, 0 } },
1172 	{ SYS(readlinkat), 4, { ARG_DIRFD, ARG_DEVNULL_FILENAME, ARG_PTR, ARG_LEN, 0, 0 } },
1173 	{ SYS(readlinkat), 4, { ARG_DIRFD, ARG_DEVNULL_FILENAME, ARG_PTR_WR, ARG_LEN, 0, 0 } },
1174 #endif
1175 #if DEFSYS(readv)
1176 	{ SYS(readv), 3, { ARG_FD, ARG_PTR, ARG_INT, 0, 0, 0 } },
1177 	{ SYS(readv), 3, { ARG_FD, ARG_PTR_WR, ARG_INT, 0, 0, 0 } },
1178 #endif
1179 #if DEFSYS(reboot)
1180 	// { SYS(reboot), 3, { ARG_INT, ARG_INT, ARG_PTR, 0, 0, 0 } },
1181 #endif
1182 #if DEFSYS(recv)
1183 	{ SYS(recv), 4, { ARG_SOCKFD, ARG_PTR, ARG_LEN, ARG_FLAG, 0, 0 } },
1184 	{ SYS(recv), 4, { ARG_SOCKFD, ARG_PTR_WR, ARG_LEN, ARG_FLAG, 0, 0 } },
1185 #endif
1186 #if DEFSYS(recvfrom)
1187 	{ SYS(recvfrom), 6, { ARG_SOCKFD, ARG_PTR, ARG_LEN, ARG_FLAG, ARG_PTR, ARG_PTR } },
1188 	{ SYS(recvfrom), 6, { ARG_SOCKFD, ARG_PTR, ARG_LEN, ARG_FLAG, ARG_PTR, ARG_PTR } },
1189 #endif
1190 #if DEFSYS(recvmsg)
1191 	{ SYS(recvmsg), 3, { ARG_SOCKFD, ARG_PTR, ARG_FLAG, 0, 0, 0 } },
1192 	{ SYS(recvmsg), 3, { ARG_SOCKFD, ARG_PTR_WR, ARG_FLAG, 0, 0, 0 } },
1193 #endif
1194 #if DEFSYS(recvmmsg)
1195 	{ SYS(recvmmsg), 5, { ARG_SOCKFD, ARG_PTR, ARG_LEN, ARG_FLAG, ARG_PTR, 0 } },
1196 	{ SYS(recvmmsg), 5, { ARG_SOCKFD, ARG_PTR_WR, ARG_LEN, ARG_FLAG, ARG_PTR, 0 } },
1197 #endif
1198 #if DEFSYS(remap_file_pages)
1199 	{ SYS(remap_file_pages), 5, { ARG_PTR, ARG_LEN, ARG_INT, ARG_UINT, ARG_FLAG, 0 } },
1200 #endif
1201 #if DEFSYS(removexattr)
1202 	{ SYS(removexattr), 2, { ARG_EMPTY_FILENAME, ARG_PTR, 0, 0, 0, 0 } },
1203 #endif
1204 #if DEFSYS(rename)
1205 	{ SYS(rename), 2, { ARG_EMPTY_FILENAME, ARG_EMPTY_FILENAME, 0, 0, 0, 0 } },
1206 #endif
1207 #if DEFSYS(renameat)
1208 	{ SYS(renameat), 4, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_DIRFD, ARG_EMPTY_FILENAME, 0, 0 } },
1209 #endif
1210 #if DEFSYS(renameat2)
1211 	{ SYS(renameat2), 5, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_FLAG, 0 } },
1212 #endif
1213 #if DEFSYS(request_key)
1214 	{ SYS(request_key), 4, { ARG_PTR, ARG_PTR, ARG_PTR, ARG_INT, 0, 0 } },
1215 #endif
1216 #if DEFSYS(riscv_flush_icache)
1217 	{ SYS(riscv_flush_icache), 3, { ARG_PTR, ARG_PTR, ARG_INT, 0, 0, 0 } },
1218 #endif
1219 #if DEFSYS(rmdir)
1220 	//{ SYS(rmdir), 1, { ARG_EMPTY_FILENAME, 0, 0, 0, 0, 0 } },
1221 #endif
1222 #if DEFSYS(rseq)
1223 	{ SYS(rseq), 4, { ARG_PTR, ARG_LEN, ARG_FLAG, ARG_UINT, 0, 0 } },
1224 #endif
1225 #if DEFSYS(sigaction)
1226 	{ SYS(sigaction), 3, { ARG_INT, ARG_PTR, ARG_PTR, 0, 0, 0 } },
1227 #endif
1228 #if DEFSYS(rt_sigaction)
1229 	{ SYS(rt_sigaction), 3, { ARG_INT, ARG_PTR, ARG_PTR, 0, 0, 0 } },
1230 #endif
1231 #if DEFSYS(rt_sigpending)
1232 	{ SYS(rt_sigpending), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
1233 #endif
1234 #if DEFSYS(rt_sigprocmask)
1235 	{ SYS(rt_sigprocmask), 4, { ARG_INT, ARG_PTR, ARG_PTR, ARG_LEN, 0, 0 } },
1236 #endif
1237 #if DEFSYS(rt_sigqueueinfo)
1238 	{ SYS(rt_sigqueueinfo), 3, { ARG_PID, ARG_INT, ARG_PTR, 0, 0, 0 } },
1239 #endif
1240 #if DEFSYS(rt_sigreturn)
1241 	//{ SYS(rt_sigreturn), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
1242 #endif
1243 #if DEFSYS(rt_sigsuspend)
1244 	{ SYS(rt_sigsuspend), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
1245 #endif
1246 #if DEFSYS(rt_sigtimedwait)
1247 	{ SYS(rt_sigtimedwait), 3, { ARG_PTR, ARG_PTR, ARG_PTR, 0, 0, 0 } },
1248 #endif
1249 #if DEFSYS(rt_tgsigqueueinfo)
1250 	{ SYS(rt_tgsigqueueinfo), 4, { ARG_PID, ARG_PID, ARG_INT, ARG_PTR, 0, 0 } },
1251 #endif
1252 #if DEFSYS(rtas)
1253 	/* TODO s390x */
1254 #endif
1255 #if DEFSYS(s390_runtime_instr)
1256 	{ SYS(s390_runtime_instr), 2, { ARG_INT, ARG_INT, 0, 0, 0, 0 } },
1257 #endif
1258 #if DEFSYS(s390_pci_mmio_read)
1259 	/* { SYS(s390_pci_mmio_read), 3, { ARG_UINT, ARG_PTR, ARG_LEN, 0, 0, 0 } }, */
1260 #endif
1261 #if DEFSYS(s390_pci_mmio_write)
1262 	/* { SYS(s390_pci_mmio_write), 3, { ARG_UINT, ARG_PTR, ARG_LEN, 0, 0, 0 } }, */
1263 #endif
1264 #if DEFSYS(s390_sthyi)
1265 	{ SYS(s390_sthyi), 4, { ARG_UINT, ARG_PTR, ARG_PTR, ARG_FLAG, 0, 0 } },
1266 #endif
1267 #if DEFSYS(s390_guarded_storage)
1268 	{ SYS(s390_guarded_storage), 4, { ARG_INT, ARG_PTR, 0, 0, 0, 0 } },
1269 #endif
1270 #if DEFSYS(sched_get_priority_max)
1271 	{ SYS(sched_get_priority_max), 1, { ARG_INT, 0, 0, 0, 0, 0 } },
1272 #endif
1273 #if DEFSYS(sched_get_priority_min)
1274 	{ SYS(sched_get_priority_min), 1, { ARG_INT, 0, 0, 0, 0, 0 } },
1275 #endif
1276 #if DEFSYS(sched_getaffinity)
1277 	{ SYS(sched_getaffinity), 3, { ARG_PID, ARG_LEN, ARG_PTR, 0, 0, 0 } },
1278 	{ SYS(sched_getaffinity), 3, { ARG_PID, ARG_LEN, ARG_PTR_WR, 0, 0, 0 } },
1279 #endif
1280 #if DEFSYS(sched_getattr)
1281 	{ SYS(sched_getattr), 3, { ARG_PID, ARG_PTR, ARG_FLAG, 0, 0, 0 } },
1282 	{ SYS(sched_getattr), 3, { ARG_PID, ARG_PTR_WR, ARG_FLAG, 0, 0, 0 } },
1283 #endif
1284 #if DEFSYS(sched_getparam)
1285 	{ SYS(sched_getparam), 2, { ARG_PID, ARG_PTR, 0, 0, 0, 0 } },
1286 	{ SYS(sched_getparam), 2, { ARG_PID, ARG_PTR_WR, 0, 0, 0, 0 } },
1287 #endif
1288 #if DEFSYS(sched_getscheduler)
1289 	{ SYS(sched_getscheduler), 1, { ARG_PID, 0, 0, 0, 0, 0 } },
1290 #endif
1291 #if DEFSYS(sched_get_rr_interval)
1292 	{ SYS(sched_get_rr_interval), 2, { ARG_PID, ARG_PTR, 0, 0, 0, 0 } },
1293 	{ SYS(sched_get_rr_interval), 2, { ARG_PID, ARG_PTR_WR, 0, 0, 0, 0 } },
1294 #endif
1295 #if DEFSYS(sched_set_affinity)
1296 	/* SPARC & SPARC64 */
1297 	{ SYS(sched_set_affinity), 3, { ARG_PID, ARG_LEN, ARG_PTR, 0, 0, 0 } },
1298 #endif
1299 #if DEFSYS(sched_setaffinity)
1300 	{ SYS(sched_setaffinity), 3, { ARG_PID, ARG_LEN, ARG_PTR, 0, 0, 0 } },
1301 #endif
1302 #if DEFSYS(sched_setattr)
1303 	{ SYS(sched_setattr), 3, { ARG_PID, ARG_PTR, ARG_FLAG, 0, 0, 0 } },
1304 #endif
1305 #if DEFSYS(sched_setparam)
1306 	{ SYS(sched_setparam), 2, { ARG_PID, ARG_PTR, 0, 0, 0, 0 } },
1307 #endif
1308 #if DEFSYS(sched_yield)
1309 	//{ SYS(sched_yield), 0, { 0, 0, 0, 0, 0, 0 } },
1310 #endif
1311 #if DEFSYS(seccomp)
1312 	{ SYS(seccomp), 3, { ARG_UINT, ARG_FLAG, ARG_PTR, 0, 0, 0 } },
1313 #endif
1314 #if DEFSYS(select)
1315 	{ SYS(select), 5, { ARG_FD, ARG_PTR, ARG_PTR, ARG_PTR, ARG_PTR, 0 } },
1316 #endif
1317 #if DEFSYS(semctl)
1318 	{ SYS(semctl), 6, { ARG_INT, ARG_INT, ARG_INT, ARG_PTR, ARG_PTR, ARG_PTR } },
1319 #endif
1320 #if DEFSYS(semget)
1321 	{ SYS(semget), 3, { ARG_INT, ARG_INT, ARG_FLAG, 0, 0, 0 } },
1322 #endif
1323 #if DEFSYS(semop)
1324 	{ SYS(semop), 3, { ARG_INT, ARG_PTR, ARG_LEN, 0, 0, 0 } },
1325 #endif
1326 #if DEFSYS(semtimedop)
1327 	{ SYS(semtimedop), 4, { ARG_INT, ARG_PTR, ARG_LEN, ARG_PTR, 0, 0 } },
1328 #endif
1329 /*
1330  *  The following are not system calls, ignored for now
1331  */
1332 #if 0
1333 #if DEFSYS(sem_destroy)
1334 	{ SYS(sem_destroy), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
1335 #endif
1336 #if DEFSYS(sem_init)
1337 	{ SYS(sem_init), 3, { ARG_PTR, ARG_INT, ARG_INT, 0, 0, 0 } },
1338 #endif
1339 #if DEFSYS(sem_post)
1340 	{ SYS(sem_post), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
1341 #endif
1342 #if DEFSYS(sem_wait)
1343 	{ SYS(sem_wait), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
1344 #endif
1345 #if DEFSYS(sem_trywait)
1346 	{ SYS(sem_trywait), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
1347 #endif
1348 #if DEFSYS(sem_timedwait)
1349 	{ SYS(sem_timedwait), 2, { ARG_PTR, ARG_PTR, 0, 0, 0, 0 } },
1350 #endif
1351 #endif
1352 #if DEFSYS(send)
1353 	{ SYS(send), 4, { ARG_SOCKFD, ARG_PTR, ARG_LEN, ARG_FLAG, 0, 0 } },
1354 #endif
1355 #if DEFSYS(sendfile)
1356 	{ SYS(sendfile), 4, { ARG_FD, ARG_FD, ARG_UINT, ARG_LEN, 0, 0 } },
1357 #endif
1358 #if DEFSYS(sendfile64)
1359 	{ SYS(sendfile64), 4, { ARG_FD, ARG_FD, ARG_UINT, ARG_LEN, 0, 0 } },
1360 #endif
1361 #if DEFSYS(sendmmsg)
1362 	{ SYS(sendmmsg), 4, { ARG_SOCKFD, ARG_PTR, ARG_INT, ARG_FLAG, 0, 0 } },
1363 #endif
1364 #if DEFSYS(sendmsg)
1365 	{ SYS(sendmsg), 3, { ARG_SOCKFD, ARG_PTR, ARG_FLAG, 0, 0, 0 } },
1366 #endif
1367 #if DEFSYS(sendto)
1368 	{ SYS(sendto), 6, { ARG_SOCKFD, ARG_PTR, ARG_LEN, ARG_FLAG, ARG_PTR, ARG_LEN } },
1369 #endif
1370 #if DEFSYS(set_mempolicy)
1371 	{ SYS(set_mempolicy), 3, { ARG_INT, ARG_PTR, ARG_UINT, 0, 0, 0 } },
1372 #endif
1373 #if DEFSYS(set_robust_list)
1374 	{ SYS(set_robust_list), 2, { ARG_PTR, ARG_LEN, 0, 0, 0, 0 } },
1375 #endif
1376 #if DEFSYS(set_thread_area)
1377 	{ SYS(set_thread_area), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
1378 #endif
1379 #if DEFSYS(set_tid_address)
1380 	{ SYS(set_tid_address), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
1381 #endif
1382 #if DEFSYS(setdomainname)
1383 	//{ SYS(setdomainname), 2, { ARG_PTR, ARG_LEN, 0, 0, 0, 0 } },
1384 #endif
1385 #if DEFSYS(setfsgid)
1386 	{ SYS(setfsgid), 1, { ARG_GID, 0, 0, 0, 0, 0 } },
1387 #endif
1388 #if DEFSYS(setfsgid32)
1389 	{ SYS(setfsgid32), 1, { ARG_GID, 0, 0, 0, 0, 0 } },
1390 #endif
1391 #if DEFSYS(setfsuid)
1392 	{ SYS(setfsuid), 1, { ARG_GID, 0, 0, 0, 0, 0 } },
1393 #endif
1394 #if DEFSYS(setfsuid32)
1395 	{ SYS(setfsuid32), 1, { ARG_GID, 0, 0, 0, 0, 0 } },
1396 #endif
1397 #if DEFSYS(setgid)
1398 	{ SYS(setgid), 1, { ARG_GID, 0, 0, 0, 0, 0 } },
1399 #endif
1400 #if DEFSYS(setgid32)
1401 	{ SYS(setgid32), 1, { ARG_GID, 0, 0, 0, 0, 0 } },
1402 #endif
1403 #if DEFSYS(setgroups)
1404 	{ SYS(setgroups), 2, { ARG_LEN, ARG_PTR, 0, 0, 0, 0 } },
1405 #endif
1406 #if DEFSYS(setgroups32)
1407 	{ SYS(setgroups32), 2, { ARG_LEN, ARG_PTR, 0, 0, 0, 0 } },
1408 #endif
1409 #if DEFSYS(sethae)
1410 	/* ALPHA only */
1411 #endif
1412 #if DEFSYS(sethostname)
1413 	{ SYS(sethostname), 2, { ARG_PTR, ARG_LEN, 0, 0, 0, 0 } },
1414 #endif
1415 #if DEFSYS(setitimer)
1416 	{ SYS(setitimer), 3, { ARG_INT, ARG_NON_NULL_PTR, ARG_NON_NULL_PTR, 0, 0, 0 } },
1417 #endif
1418 #if DEFSYS(setmntent)
1419 	{ SYS(setmntent), 2, { ARG_EMPTY_FILENAME, ARG_PTR, 0, 0, 0, 0 } },
1420 #endif
1421 #if DEFSYS(setns)
1422 	{ SYS(setns), 2, { ARG_FD, ARG_INT, 0, 0, 0, 0 } },
1423 #endif
1424 #if DEFSYS(setpgid)
1425 	{ SYS(setpgid), 2, { ARG_PID, ARG_PID, 0, 0, 0, 0 } },
1426 #endif
1427 #if DEFSYS(setpgrp)
1428 	/* ALPHA, alternative to setpgid */
1429 	{ SYS(setpgrp), 2, { ARG_PID, ARG_PID, 0, 0, 0, 0 } },
1430 #endif
1431 #if DEFSYS(setpriority)
1432 	{ SYS(setpriority), 3, { ARG_INT, ARG_INT, ARG_INT, 0, 0, 0 } },
1433 #endif
1434 #if DEFSYS(setregid)
1435 	{ SYS(setregid), 2, { ARG_GID, ARG_GID, 0, 0, 0, 0 } },
1436 #endif
1437 #if DEFSYS(setregid32)
1438 	{ SYS(setregid32), 2, { ARG_GID, ARG_GID, 0, 0, 0, 0 } },
1439 #endif
1440 #if DEFSYS(setresgid)
1441 	{ SYS(setresgid), 3, { ARG_GID, ARG_GID, ARG_GID, 0, 0, 0 } },
1442 #endif
1443 #if DEFSYS(setresgid32)
1444 	{ SYS(setresgid32), 3, { ARG_GID, ARG_GID, ARG_GID, 0, 0, 0 } },
1445 #endif
1446 #if DEFSYS(setresuid)
1447 	{ SYS(setresuid), 3, { ARG_UID, ARG_UID, ARG_UID, 0, 0, 0 } },
1448 #endif
1449 #if DEFSYS(setresuid32)
1450 	{ SYS(setresuid32), 3, { ARG_UID, ARG_UID, ARG_UID, 0, 0, 0 } },
1451 #endif
1452 #if DEFSYS(setreuid)
1453 	{ SYS(setreuid), 2, { ARG_UID, ARG_UID, 0, 0, 0, 0 } },
1454 #endif
1455 #if DEFSYS(setreuid32)
1456 	{ SYS(setreuid32), 2, { ARG_UID, ARG_UID, 0, 0, 0, 0 } },
1457 #endif
1458 #if DEFSYS(setrlimit)
1459 	{ SYS(setrlimit), 2, { ARG_INT, ARG_PTR, 0, 0, 0, 0 } },
1460 #endif
1461 #if DEFSYS(setsid)
1462 	//{ SYS(setsid), 0, { 0, 0, 0, 0, 0, 0 } },
1463 #endif
1464 #if DEFSYS(setsockopt)
1465 	{ SYS(setsockopt), 5, { ARG_SOCKFD, ARG_INT, ARG_INT, ARG_PTR, ARG_LEN, 0 } },
1466 #endif
1467 #if DEFSYS(settimeofday)
1468 	{ SYS(settimeofday), 2, { ARG_PTR, ARG_PTR, 0, 0, 0, 0 } },
1469 #endif
1470 #if DEFSYS(setuid)
1471 	{ SYS(setuid), 1, { ARG_UID, 0, 0, 0, 0, 0 } },
1472 #endif
1473 #if DEFSYS(setuid32)
1474 	{ SYS(setuid32), 1, { ARG_UID, 0, 0, 0, 0, 0 } },
1475 #endif
1476 #if DEFSYS(setxattr)
1477 	{ SYS(setxattr), 5, { ARG_EMPTY_FILENAME, ARG_PTR, ARG_PTR, ARG_LEN, ARG_FLAG, 0 } },
1478 #endif
1479 #if DEFSYS(sgetmask)
1480 	{ SYS(sgetmask), 1, { ARG_UINT, 0, 0, 0, 0, 0 } },
1481 #endif
1482 #if DEFSYS(shmat)
1483 	{ SYS(shmat), 3, { ARG_INT, ARG_PTR, ARG_FLAG, 0, 0, 0 } },
1484 #endif
1485 #if DEFSYS(shmctl)
1486 	{ SYS(shmctl), 3, { ARG_INT, ARG_INT, ARG_PTR, 0, 0, 0 } },
1487 #endif
1488 #if DEFSYS(shmdt)
1489 	{ SYS(shmdt), 3, { ARG_INT, ARG_PTR, ARG_FLAG, 0, 0, 0 } },
1490 #endif
1491 #if DEFSYS(shmget)
1492 	{ SYS(shmget), 3, { ARG_INT, ARG_LEN, ARG_FLAG, 0, 0, 0 } },
1493 #endif
1494 #if DEFSYS(shutdown)
1495 	{ SYS(shutdown), 2, { ARG_SOCKFD, ARG_INT, 0, 0, 0, 0 } },
1496 #endif
1497 #if DEFSYS(sigaction)
1498 	{ SYS(sigaction), 3, { ARG_INT, ARG_PTR, ARG_PTR, 0, 0, 0 } },
1499 #endif
1500 #if DEFSYS(sigaltstack)
1501 	{ SYS(sigaltstack), 3, { ARG_NON_NULL_PTR, ARG_NON_NULL_PTR, 0, 0, 0, 0 } },
1502 #endif
1503 #if DEFSYS(signal)
1504 	{ SYS(signal), 2, { ARG_INT, ARG_NON_NULL_PTR, 0, 0, 0, 0 } },
1505 #endif
1506 #if DEFSYS(signalfd)
1507 	{ SYS(signalfd), 3, { ARG_FD, ARG_PTR, ARG_LEN, 0, 0, 0 } },
1508 #endif
1509 #if DEFSYS(signalfd4)
1510 	{ SYS(signalfd4), 3, { ARG_FD, ARG_PTR, ARG_LEN, ARG_FLAG, 0, 0 } },
1511 #endif
1512 #if DEFSYS(sigpending)
1513 	{ SYS(sigpending), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
1514 #endif
1515 #if DEFSYS(sigreturn)
1516 	/* { SYS(sigreturn), 4, { ARG_PTR, ARG_PTR, ARG_PTR, ARG_PTR, 0, 0 } }, */
1517 #endif
1518 #if DEFSYS(sigsuspend)
1519 	{ SYS(sigsuspend), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
1520 #endif
1521 #if DEFSYS(sigtimedwait)
1522 	{ SYS(sigtimedwait), 3, { ARG_PTR, ARG_PTR, ARG_PTR, 0, 0, 0 } },
1523 #endif
1524 #if DEFSYS(sigwaitinfo)
1525 	{ SYS(sigwaitinfo), 2, { ARG_PTR, ARG_PTR, 0, 0, 0, 0 } },
1526 #endif
1527 #if DEFSYS(socket)
1528 	{ SYS(socket), 3, { ARG_INT, ARG_INT, ARG_INT, 0, 0, 0 } },
1529 #endif
1530 #if DEFSYS(socketcall)
1531 	{ SYS(socketcall), 2, { ARG_INT, ARG_PTR, 0, 0, 0, 0 } },
1532 #endif
1533 #if DEFSYS(socketpair)
1534 	{ SYS(socketpair), 4, { ARG_INT, ARG_INT, ARG_INT, ARG_PTR, 0, 0 } },
1535 #endif
1536 #if DEFSYS(spill)
1537 	/* Xtensa only */
1538 #endif
1539 #if DEFSYS(splice)
1540 	{ SYS(splice), 6, { ARG_FD, ARG_PTR, ARG_FD, ARG_PTR, ARG_LEN, ARG_FLAG } },
1541 #endif
1542 #if DEFSYS(spu_create)
1543 	/* PowerPC/PowerPC64 only */
1544 	{ SYS(spu_create), 3, { ARG_EMPTY_FILENAME, ARG_FLAG, ARG_MODE, 0, 0, 0 } },
1545 	{ SYS(spu_create), 4, { ARG_EMPTY_FILENAME, ARG_FLAG, ARG_MODE, ARG_INT, 0, 0 } },
1546 #endif
1547 #if DEFSYS(spu_run)
1548 	/* PowerPC/PowerPC64 only */
1549 	{ SYS(spu_run), 3, { ARG_FD, ARG_PTR, ARG_PTR, 0, 0, 0 } },
1550 #endif
1551 #if DEFSYS(sram_alloc)
1552 	/* Blackfin, remove 4.17 */
1553 #endif
1554 #if DEFSYS(sram_free)
1555 	/* Blackfin, remove 4.17 */
1556 #endif
1557 #if DEFSYS(ssetmask)
1558 	{ SYS(ssetmask), 1, { ARG_UINT, 0, 0, 0, 0, 0 } },
1559 #endif
1560 #if DEFSYS(stat)
1561 	{ SYS(stat), 2, { ARG_EMPTY_FILENAME, ARG_PTR, 0, 0, 0, 0 } },
1562 	{ SYS(stat), 2, { ARG_EMPTY_FILENAME, ARG_PTR_WR, 0, 0, 0, 0 } },
1563 	{ SYS(stat), 2, { ARG_DEVNULL_FILENAME, ARG_PTR, 0, 0, 0, 0 } },
1564 	{ SYS(stat), 2, { ARG_DEVNULL_FILENAME, ARG_PTR_WR, 0, 0, 0, 0 } },
1565 #endif
1566 #if DEFSYS(stat64)
1567 	{ SYS(stat64), 2, { ARG_EMPTY_FILENAME, ARG_PTR, 0, 0, 0, 0 } },
1568 	{ SYS(stat64), 2, { ARG_EMPTY_FILENAME, ARG_PTR_WR, 0, 0, 0, 0 } },
1569 	{ SYS(stat64), 2, { ARG_DEVNULL_FILENAME, ARG_PTR, 0, 0, 0, 0 } },
1570 	{ SYS(stat64), 2, { ARG_DEVNULL_FILENAME, ARG_PTR_WR, 0, 0, 0, 0 } },
1571 #endif
1572 #if DEFSYS(statfs)
1573 	{ SYS(statfs), 2, { ARG_EMPTY_FILENAME, ARG_PTR, 0, 0, 0, 0 } },
1574 	{ SYS(statfs), 2, { ARG_EMPTY_FILENAME, ARG_PTR_WR, 0, 0, 0, 0 } },
1575 	{ SYS(statfs), 2, { ARG_DEVNULL_FILENAME, ARG_PTR, 0, 0, 0, 0 } },
1576 	{ SYS(statfs), 2, { ARG_DEVNULL_FILENAME, ARG_PTR_WR, 0, 0, 0, 0 } },
1577 #endif
1578 #if DEFSYS(statfs64)
1579 	{ SYS(statfs64), 2, { ARG_EMPTY_FILENAME, ARG_PTR, 0, 0, 0, 0 } },
1580 	{ SYS(statfs64), 2, { ARG_EMPTY_FILENAME, ARG_PTR_WR, 0, 0, 0, 0 } },
1581 	{ SYS(statfs64), 2, { ARG_DEVNULL_FILENAME, ARG_PTR, 0, 0, 0, 0 } },
1582 	{ SYS(statfs64), 2, { ARG_DEVNULL_FILENAME, ARG_PTR_WR, 0, 0, 0, 0 } },
1583 #endif
1584 #if DEFSYS(statx)
1585 	{ SYS(statx), 5, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_FLAG, ARG_UINT, ARG_PTR, 0 } },
1586 	{ SYS(statx), 5, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_FLAG, ARG_UINT, ARG_PTR_WR, 0 } },
1587 	{ SYS(statx), 5, { ARG_DIRFD, ARG_DEVNULL_FILENAME, ARG_FLAG, ARG_UINT, ARG_PTR, 0 } },
1588 	{ SYS(statx), 5, { ARG_DIRFD, ARG_DEVNULL_FILENAME, ARG_FLAG, ARG_UINT, ARG_PTR_WR, 0 } },
1589 #endif
1590 #if DEFSYS(stime)
1591 	{ SYS(stime), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
1592 #endif
1593 #if DEFSYS(subpage_prot)
1594 	/* PowerPC/PowerPC64 only */
1595 	{ SYS(subpage_prot), 3, { ARG_UINT, ARG_LEN, ARG_PTR, 0, 0, 0 } },
1596 #endif
1597 #if DEFSYS(swapcontext)
1598 	/* PowerPC/PowerPC64 only, TODO */
1599 #endif
1600 #if DEFSYS(switch_endian)
1601 	/* PowerPC/PowerPC64 only, TODO */
1602 #endif
1603 #if DEFSYS(swapon)
1604 	{ SYS(swapon), 2, { ARG_EMPTY_FILENAME, ARG_INT, 0, 0, 0, 0 } },
1605 #endif
1606 #if DEFSYS(swapoff)
1607 	{ SYS(swapoff), 1, { ARG_EMPTY_FILENAME, 0 , 0, 0, 0, 0 } },
1608 #endif
1609 #if DEFSYS(symlink)
1610 	{ SYS(symlink), 2, { ARG_EMPTY_FILENAME, ARG_EMPTY_FILENAME, 0, 0, 0, 0 } },
1611 #endif
1612 #if DEFSYS(symlinkat)
1613 	{ SYS(symlinkat), 3, { ARG_EMPTY_FILENAME, ARG_FD, ARG_EMPTY_FILENAME, 0, 0, 0 } },
1614 #endif
1615 #if DEFSYS(sync)
1616 	//{ SYS(sync), 0, { 0, 0, 0, 0, 0, 0 } },
1617 #endif
1618 #if DEFSYS(sync_file_range)
1619 	{ SYS(sync_file_range), 4, { ARG_FD, ARG_UINT, ARG_UINT, ARG_FLAG, 0, 0 } },
1620 #endif
1621 #if DEFSYS(sync_file_range2)
1622 	{ SYS(sync_file_range2), 4, { ARG_FD, ARG_FLAG, ARG_UINT, ARG_UINT, 0, 0 } },
1623 #endif
1624 #if DEFSYS(syncfs)
1625 	{ SYS(syncfs), 1, { ARG_FD, 0, 0, 0, 0, 0 } },
1626 #endif
1627 #if DEFSYS(sysfs)
1628 	{ SYS(sysfs), 2, { ARG_INT, ARG_PTR, 0, 0, 0, 0 } },
1629 	{ SYS(sysfs), 2, { ARG_INT, ARG_PTR_WR, 0, 0, 0, 0 } },
1630 	{ SYS(sysfs), 3, { ARG_INT, ARG_UINT, ARG_PTR, 0, 0, 0 } },
1631 	{ SYS(sysfs), 3, { ARG_INT, ARG_UINT, ARG_PTR_WR, 0, 0, 0 } },
1632 	{ SYS(sysfs), 1, { ARG_INT, 0, 0, 0, 0, 0 } },
1633 #endif
1634 #if DEFSYS(sysinfo)
1635 	{ SYS(sysinfo), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
1636 	{ SYS(sysinfo), 1, { ARG_PTR_WR, 0, 0, 0, 0, 0 } },
1637 #endif
1638 #if DEFSYS(syslog)
1639 	{ SYS(syslog), 3, { ARG_INT, ARG_PTR, ARG_PTR, 0, 0, 0 } },
1640 #endif
1641 #if DEFSYS(sysmips)
1642 	/* ARM OABI and MIPS O32 ABI, TODO */
1643 #endif
1644 #if DEFSYS(tee)
1645 	{ SYS(tee), 4, { ARG_FD, ARG_FD, ARG_LEN, ARG_FLAG, 0, 0 } },
1646 #endif
1647 #if DEFSYS(tgkill)
1648 	/* { SYS(tgkill), 3, { ARG_PID, ARG_PID, ARG_INT, 0, 0, 0 } },*/
1649 #endif
1650 #if DEFSYS(time)
1651 	{ SYS(time), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
1652 	{ SYS(time), 1, { ARG_PTR_WR, 0, 0, 0, 0, 0 } },
1653 #endif
1654 #if DEFSYS(timer_create)
1655 	{ SYS(timer_create), 3, { ARG_CLOCKID_T, ARG_PTR, ARG_PTR, 0, 0, 0 } },
1656 #endif
1657 #if DEFSYS(timer_delete)
1658 	{ SYS(timer_delete), 1, { ARG_UINT, 0, 0, 0, 0, 0 } },
1659 #endif
1660 #if DEFSYS(timer_getoverrun)
1661 	{ SYS(timer_getoverrun), 1, { ARG_UINT, 0, 0, 0, 0, 0 } },
1662 #endif
1663 #if DEFSYS(timer_gettime)
1664 	{ SYS(timer_gettime), 2, { ARG_UINT, ARG_PTR, 0, 0, 0, 0 } },
1665 	{ SYS(timer_gettime), 2, { ARG_UINT, ARG_PTR_WR, 0, 0, 0, 0 } },
1666 #endif
1667 #if DEFSYS(timer_settime)
1668 	{ SYS(timer_settime), 4, { ARG_UINT, ARG_FLAG, ARG_PTR, ARG_PTR, 0, 0 } },
1669 #endif
1670 #if DEFSYS(timerfd_create)
1671 	{ SYS(timerfd_create), 2, { ARG_CLOCKID_T, ARG_FLAG, 0, 0, 0, 0 } },
1672 #endif
1673 #if DEFSYS(timerfd_gettime)
1674 	{ SYS(timerfd_gettime), 2, { ARG_CLOCKID_T, ARG_PTR, 0, 0, 0, 0 } },
1675 	{ SYS(timerfd_gettime), 2, { ARG_CLOCKID_T, ARG_PTR_WR, 0, 0, 0, 0 } },
1676 #endif
1677 #if DEFSYS(timerfd_settime)
1678 	{ SYS(timer_settime), 4, { ARG_FD, ARG_FLAG, ARG_PTR, ARG_PTR, 0, 0 } },
1679 #endif
1680 #if DEFSYS(times)
1681 	{ SYS(times), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
1682 	{ SYS(times), 1, { ARG_PTR_WR, 0, 0, 0, 0, 0 } },
1683 #endif
1684 #if DEFSYS(tkill)
1685 	/* { SYS(tkill), 2, { ARG_PID, ARG_INT, 0, 0, 0, 0 }, */
1686 #endif
1687 #if DEFSYS(truncate)
1688 	{ SYS(truncate), 2, { ARG_EMPTY_FILENAME, ARG_LEN, 0, 0, 0, 0 } },
1689 #endif
1690 #if DEFSYS(truncate64)
1691 	{ SYS(truncate64), 2, { ARG_EMPTY_FILENAME, ARG_LEN, 0, 0, 0, 0 } },
1692 #endif
1693 #if DEFSYS(ugetrlimit)
1694 	/* TODO */
1695 #endif
1696 #if DEFSYS(umask)
1697 	{ SYS(umask), 1, { ARG_UINT, 0, 0, 0, 0, 0 } },
1698 #endif
1699 #if DEFSYS(umount)
1700 	{ SYS(umount), 1, { ARG_EMPTY_FILENAME, 0, 0, 0, 0, 0 } },
1701 	{ SYS(umount), 1, { ARG_DEVNULL_FILENAME, 0, 0, 0, 0, 0 } },
1702 #endif
1703 #if DEFSYS(umount2)
1704 	/* TODO */
1705 #endif
1706 #if DEFSYS(uname)
1707 	{ SYS(uname), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
1708 	{ SYS(uname), 1, { ARG_PTR_WR, 0, 0, 0, 0, 0 } },
1709 #endif
1710 #if DEFSYS(unlink)
1711 	{ SYS(unlink), 1, { ARG_EMPTY_FILENAME, 0, 0, 0, 0, 0 } },
1712 #endif
1713 #if DEFSYS(unlinkat)
1714 	{ SYS(unlinkat), 3, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_FLAG, 0, 0, 0 } },
1715 #endif
1716 #if DEFSYS(unshare)
1717 	{ SYS(unshare), 1, { ARG_INT, 0, 0, 0, 0, 0 } },
1718 #endif
1719 #if DEFSYS(uselib)
1720 	{ SYS(uselib), 1, { ARG_EMPTY_FILENAME, 0, 0, 0, 0, 0 } },
1721 	{ SYS(uselib), 1, { ARG_DEVNULL_FILENAME, 0, 0, 0, 0, 0 } },
1722 #endif
1723 #if DEFSYS(userfaultfd)
1724 	{ SYS(userfaultfd), 1, { ARG_FLAG, 0, 0, 0, 0, 0 } },
1725 #endif
1726 #if DEFSYS(usr26)
1727 	/* ARM OABI only */
1728 #endif
1729 #if DEFSYS(ustat)
1730 	{ SYS(ustat), 2, { ARG_UINT, ARG_PTR, 0, 0, 0, 0 } },
1731 	{ SYS(ustat), 2, { ARG_UINT, ARG_PTR_WR, 0, 0, 0, 0 } },
1732 #endif
1733 #if DEFSYS(utime)
1734 	{ SYS(utime), 2, { ARG_EMPTY_FILENAME, ARG_PTR, 0, 0, 0, 0 } },
1735 	{ SYS(utime), 2, { ARG_EMPTY_FILENAME, ARG_PTR_WR, 0, 0, 0, 0 } },
1736 #endif
1737 #if DEFSYS(utimensat)
1738 	{ SYS(utimensat), 4, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_PTR, ARG_FLAG, 0, 0 } },
1739 	{ SYS(utimensat), 4, { ARG_DIRFD, ARG_EMPTY_FILENAME, ARG_PTR_WR, ARG_FLAG, 0, 0 } },
1740 #endif
1741 #if DEFSYS(utimes)
1742 	{ SYS(utimes), 2, { ARG_EMPTY_FILENAME, ARG_PTR, 0, 0, 0, 0 } },
1743 	{ SYS(utimes), 2, { ARG_EMPTY_FILENAME, ARG_PTR_WR, 0, 0, 0, 0 } },
1744 #endif
1745 #if DEFSYS(utrap_install)
1746 	/* SPARC64 */
1747 #endif
1748 #if DEFSYS(vm86old)
1749 #endif
1750 #if DEFSYS(vm86)
1751 #endif
1752 #if DEFSYS(vmsplice)
1753 	{ SYS(vmsplice), 4, { ARG_FD, ARG_PTR, ARG_UINT, ARG_FLAG, 0, 0 } },
1754 #endif
1755 #if DEFSYS(wait)
1756 	{ SYS(wait), 1, { ARG_PTR, 0, 0, 0, 0, 0 } },
1757 #endif
1758 #if DEFSYS(wait3)
1759 	{ SYS(wait3), 3, { ARG_PTR, ARG_INT, ARG_PTR, 0, 0, 0 } },
1760 	{ SYS(wait3), 3, { ARG_PTR_WR, ARG_INT, ARG_PTR, 0, 0, 0 } },
1761 	{ SYS(wait3), 3, { ARG_PTR, ARG_INT, ARG_PTR_WR, 0, 0, 0 } },
1762 #endif
1763 #if DEFSYS(wait4)
1764 	{ SYS(wait4), 4, { ARG_PID, ARG_PTR, ARG_INT, ARG_PTR, 0, 0 } },
1765 #endif
1766 #if DEFSYS(waitid)
1767 	{ SYS(waitid), 4, { ARG_INT, ARG_INT, ARG_PTR, ARG_INT, 0, 0 } },
1768 #endif
1769 #if DEFSYS(waitpid)
1770 	{ SYS(waitpid), 3, { ARG_PID, ARG_PTR, ARG_INT, 0, 0, 0 } },
1771 #endif
1772 #if DEFSYS(write)
1773 	{ SYS(write), 3, { ARG_FD, ARG_PTR, ARG_LEN, 0, 0, 0 } },
1774 #endif
1775 #if DEFSYS(writev)
1776 	{ SYS(writev), 3, { ARG_FD, ARG_PTR, ARG_LEN, 0, 0, 0 } },
1777 #endif
1778 #if DEFSYS(xtensa)
1779 	/* xtensa only */
1780 #endif
1781 };
1782 
1783 static bool *stress_syscall_exercised;
1784 
1785 /*
1786  *  running context shared between parent and child
1787  *  this allows us to have enough data about a system call that
1788  *  caused the child to crash. Also contains running stats
1789  *  of the number of system calls made.
1790  */
1791 typedef struct {
1792 	uint64_t hash;
1793 	uint64_t syscall;
1794 	uint64_t type;
1795 	const char *name;
1796 	size_t idx;
1797 	uint64_t counter;
1798 	uint64_t skip_crashed;
1799 	uint64_t skip_errno_zero;
1800 	uint64_t skip_timed_out;
1801 	uint64_t crash_count[SIZEOF_ARRAY(stress_syscall_args)];
1802 	unsigned long args[6];
1803 	unsigned char filler[4096];
1804 } syscall_current_context_t;
1805 
1806 static syscall_current_context_t *current_context;
1807 
func_exit(void)1808 static void NORETURN func_exit(void)
1809 {
1810 	_exit(EXIT_SUCCESS);
1811 }
1812 
1813 /*
1814  *  Various invalid argument values
1815  */
1816 static unsigned long none_values[] = { 0 };
1817 static unsigned long mode_values[] = {
1818 	(unsigned long)-1, INT_MAX, (unsigned long)INT_MIN,
1819 	~(unsigned long)0, 1ULL << 20,
1820 };
1821 static unsigned long access_mode_values[] = {
1822 	(unsigned long)~(F_OK | R_OK | W_OK | X_OK)
1823 };
1824 static long sockfds[] = {
1825 	/* sockfd */ 0, 0, -1, INT_MAX, INT_MIN, ~(long)0
1826 };
1827 static long fds[] = {
1828 	/* fd */ 0, -1, INT_MAX, INT_MIN, ~(long)0
1829 };
1830 static long dirfds[] = {
1831 	-1, AT_FDCWD, INT_MIN, ~(long)0
1832 };
1833 static long clockids[] = {
1834 	-1, INT_MAX, INT_MIN, ~(long)0, SHR_UL(0xfe23ULL, 18)
1835 };
1836 static long sockaddrs[] = {
1837 	/*small_ptr*/ 0, /*page_ptr*/ 0, 0, -1, INT_MAX, INT_MIN
1838 };
1839 static unsigned long brk_addrs[] = {
1840 	0, (unsigned long)-1, INT_MAX, (unsigned long)INT_MIN,
1841 	~(unsigned long)0, 4096
1842 };
1843 static unsigned long empty_filenames[] = {
1844 	(unsigned long)"", (unsigned long)NULL
1845 };
1846 static unsigned long zero_filenames[] = {
1847 	(unsigned long)"/dev/zero"
1848 };
1849 static unsigned long null_filenames[] = {
1850 	(unsigned long)"/dev/null"
1851 };
1852 static long flags[] = {
1853 	-1, -2, INT_MIN, SHR_UL(0xffffULL, 20)
1854 };
1855 static unsigned long lengths[] = {
1856 	(unsigned long)-1, (unsigned long)-2,
1857 	(unsigned long)INT_MIN, INT_MAX,
1858 	~(unsigned long)0, -SHR_UL(1, 31)
1859 };
1860 static long ints[] = {
1861 	0, -1, -2, INT_MIN, INT_MAX, SHR_UL(0xff, 30), SHR_UL(1, 30),
1862 	(long)-SHR_UL(0xff, 30), (long)-SHR_UL(1, 30)
1863 };
1864 static unsigned long uints[] = {
1865 	INT_MAX, SHR_UL(0xff, 30), -SHR_UL(0xff, 30), ~(unsigned long)0
1866 };
1867 static unsigned long func_ptrs[] = {
1868 	(unsigned long)func_exit
1869 };
1870 static unsigned long ptrs[] = {
1871 	/*small_ptr*/ 0, /*page_ptr*/ 0, 0, (unsigned long)-1,
1872 	INT_MAX, (unsigned long)INT_MIN, (unsigned long)~4096L
1873 };
1874 static unsigned long ptrs_wr[] = {
1875 	/*small_ptr_wr*/ 0, /*page_ptr_wr*/ 0, 0,
1876 	(unsigned long)-1, INT_MAX, (unsigned long)INT_MIN,
1877 	(unsigned long)~4096L
1878 };
1879 static unsigned long futex_ptrs[] = {
1880 	/*small_ptr*/ 0, /*page_ptr*/ 0
1881 };
1882 static unsigned long non_null_ptrs[] = {
1883 	/*small_ptr*/ 0, /*page_ptr*/ 0, (unsigned long)-1,
1884 	INT_MAX, (unsigned long)INT_MIN, (unsigned long)~4096L
1885 };
1886 static long socklens[] = {
1887 	0, -1, INT_MAX, INT_MIN, 8192
1888 };
1889 static unsigned long timeouts[] = {
1890 	0
1891 };
1892 static pid_t pids[] = {
1893 	INT_MIN, -1, INT_MAX, ~0
1894 };
1895 static gid_t gids[] = {
1896 	(gid_t)~0L, INT_MAX
1897 };
1898 static uid_t uids[] = {
1899 	(uid_t)~0L, INT_MAX
1900 };
1901 
1902 /*
1903  *  Misc per system-call args
1904  */
1905 static char *add_key_types[] = { "key_ring" };
1906 static char *add_key_descrs[] = { "." };
1907 static unsigned long bpf_cmds[] = {
1908 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1909 	0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
1910 	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1911 	0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
1912 	0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
1913 	0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
1914 };
1915 static int bpf_lengths[] = { 0, 16, 256, 1024, 4096, 65536, 1024 * 1024 };
1916 
1917 /*
1918  *  mapping of invalid arg types to invalid arg values
1919  */
1920 static const stress_syscall_arg_values_t arg_values[] = {
1921 	ARG_VALUE(ARG_MODE, mode_values),
1922 	ARG_VALUE(ARG_SOCKFD, sockfds),
1923 	ARG_VALUE(ARG_FD, fds),
1924 	ARG_VALUE(ARG_DIRFD, dirfds),
1925 	ARG_VALUE(ARG_CLOCKID_T, clockids),
1926 	ARG_VALUE(ARG_PID, pids),
1927 	ARG_VALUE(ARG_PTR | ARG_STRUCT_SOCKADDR, sockaddrs),
1928 	ARG_VALUE(ARG_BRK_ADDR, brk_addrs),
1929 	ARG_VALUE(ARG_EMPTY_FILENAME, empty_filenames),
1930 	ARG_VALUE(ARG_DEVZERO_FILENAME, zero_filenames),
1931 	ARG_VALUE(ARG_DEVNULL_FILENAME, null_filenames),
1932 	ARG_VALUE(ARG_FLAG, flags),
1933 	ARG_VALUE(ARG_SOCKLEN_T, socklens),
1934 	ARG_VALUE(ARG_TIMEOUT, timeouts),
1935 	ARG_VALUE(ARG_LEN, lengths),
1936 	ARG_VALUE(ARG_GID, gids),
1937 	ARG_VALUE(ARG_UID, uids),
1938 	ARG_VALUE(ARG_INT, ints),
1939 	ARG_VALUE(ARG_UINT, uints),
1940 	ARG_VALUE(ARG_FUNC_PTR, func_ptrs),
1941 	ARG_VALUE(ARG_NON_NULL_PTR, non_null_ptrs),
1942 	ARG_VALUE(ARG_FUTEX_PTR, futex_ptrs),
1943 	ARG_VALUE(ARG_PTR_WR, ptrs_wr),
1944 	ARG_VALUE(ARG_PTR, ptrs),
1945 	ARG_VALUE(ARG_ACCESS_MODE, access_mode_values),
1946 
1947 	/* Misc per-system call values */
1948 	ARG_VALUE(ARG_ADD_KEY_TYPES, add_key_types),
1949 	ARG_VALUE(ARG_ADD_KEY_DESCRS, add_key_descrs),
1950 	ARG_VALUE(ARG_BPF_CMDS, bpf_cmds),
1951 	ARG_VALUE(ARG_BPF_LEN, bpf_lengths),
1952 
1953 };
1954 
1955 /*
1956  *   stress_syscall_hash()
1957  *	generate a simple hash on system call and call arguments
1958  */
stress_syscall_hash(const unsigned long syscall_num,const unsigned long args[6])1959 static unsigned long stress_syscall_hash(
1960 	const unsigned long syscall_num,
1961 	const unsigned long args[6])
1962 {
1963 	unsigned long hash = syscall_num;
1964 
1965 	ROR(hash);
1966 	ROR(hash);
1967 	hash ^= (args[0]);
1968 	ROR(hash);
1969 	ROR(hash);
1970 	hash ^= (args[1]);
1971 	ROR(hash);
1972 	ROR(hash);
1973 	hash ^= (args[2]);
1974 	ROR(hash);
1975 	ROR(hash);
1976 	hash ^= (args[3]);
1977 	ROR(hash);
1978 	ROR(hash);
1979 	hash ^= (args[4]);
1980 	ROR(hash);
1981 	ROR(hash);
1982 	hash ^= (args[5]);
1983 
1984 	return hash % SYSCALL_HASH_TABLE_SIZE;
1985 }
1986 
1987 /*
1988  *  hash_table_add()
1989  *	add system call info to the hash table
1990  * 	- will silently fail if out of memory
1991  */
hash_table_add(const unsigned long hash,const unsigned long syscall_num,const unsigned long * args,const uint8_t type)1992 static void hash_table_add(
1993 	const unsigned long hash,
1994 	const unsigned long syscall_num,
1995 	const unsigned long *args,
1996 	const uint8_t type)
1997 {
1998 	stress_syscall_arg_hash_t *h;
1999 
2000 	h = calloc(1, sizeof(*h));
2001 	if (!h)
2002 		return;
2003 	h->hash = hash;
2004 	h->syscall = syscall_num;
2005 	h->type = type;
2006 	(void)memcpy(h->args, args, sizeof(h->args));
2007 	h->next = hash_table[hash];
2008 	hash_table[hash] = h;
2009 }
2010 
2011 /*
2012  *  hash_table_free()
2013  *	free the hash table
2014  */
hash_table_free(void)2015 static void hash_table_free(void)
2016 {
2017 	size_t i;
2018 
2019 	for (i = 0; i < SIZEOF_ARRAY(hash_table); i++) {
2020 		stress_syscall_arg_hash_t *h = hash_table[i];
2021 
2022 		while (h) {
2023 			stress_syscall_arg_hash_t *next = h->next;
2024 
2025 			free(h);
2026 			h = next;
2027 		}
2028 		hash_table[i] = NULL;
2029 	}
2030 }
2031 
stress_syscall_itimer_handler(int sig)2032 static void MLOCKED_TEXT stress_syscall_itimer_handler(int sig)
2033 {
2034 	(void)sig;
2035 
2036 	if (current_context) {
2037 		current_context->type = SYSCALL_TIMED_OUT;
2038 	}
2039 }
2040 
2041 /*
2042  *  syscall_permute()
2043  *	recursively permute all possible system call invalid arguments
2044  *	- if the system call crashes, the call info is cached in
2045  *	  the current_context for the parent to record the failure
2046  *	  so it's not called again.
2047  *	- if the system call returns 0, the call info is saved
2048  *	  in the hash table so it won't get called again. This is
2049  * 	  just in the child context and is lost when the child
2050  *	  crashes
2051  */
syscall_permute(const stress_args_t * args,const int arg_num,const stress_syscall_arg_t * stress_syscall_arg,bool * syscall_exercised)2052 static void syscall_permute(
2053 	const stress_args_t *args,
2054 	const int arg_num,
2055 	const stress_syscall_arg_t *stress_syscall_arg,
2056 	bool *syscall_exercised)
2057 {
2058 	unsigned long arg_bitmask = stress_syscall_arg->arg_bitmasks[arg_num];
2059 	size_t i;
2060 	unsigned long *values = NULL;
2061 	unsigned long rnd_values[4];
2062 	size_t num_values = 0;
2063 
2064 	if (stress_time_now() > time_end)
2065 		_exit(EXIT_SUCCESS);
2066 
2067 	if (arg_num >= stress_syscall_arg->num_args) {
2068 		int ret;
2069 		const unsigned long syscall_num = stress_syscall_arg->syscall;
2070 		const unsigned long hash = stress_syscall_hash(syscall_num, current_context->args);
2071 		stress_syscall_arg_hash_t *h = hash_table[hash];
2072 		struct itimerval it;
2073 
2074 		while (h) {
2075 			if (!memcmp(h->args, current_context->args, sizeof(h->args))) {
2076 				switch (h->type) {
2077 				case SYSCALL_CRASH:
2078 					current_context->skip_crashed++;
2079 					break;
2080 				case SYSCALL_ERRNO_ZERO:
2081 					current_context->skip_errno_zero++;
2082 					break;
2083 				case SYSCALL_TIMED_OUT:
2084 					current_context->skip_timed_out++;
2085 					break;
2086 				default:
2087 					break;
2088 				}
2089 				return;
2090 			}
2091 			h = h->next;
2092 		}
2093 
2094 		errno = 0;
2095 		current_context->counter++;
2096 		current_context->hash = hash;
2097 		current_context->type = SYSCALL_CRASH;	/* Assume it will crash */
2098 
2099 		/*
2100 		 * Force abort if we take too long
2101 		 */
2102 		it.it_interval.tv_sec = 0;
2103 		it.it_interval.tv_usec = SYSCALL_TIMEOUT_USEC;
2104 		it.it_value.tv_sec = 0;
2105 		it.it_value.tv_usec = SYSCALL_TIMEOUT_USEC;
2106 		ret = setitimer(ITIMER_REAL, &it, NULL);
2107 		(void)ret;
2108 
2109 		*syscall_exercised = true;
2110 
2111 		ret = (int)syscall((long)syscall_num,
2112 			current_context->args[0],
2113 			current_context->args[1],
2114 			current_context->args[2],
2115 			current_context->args[3],
2116 			current_context->args[4],
2117 			current_context->args[5]);
2118 
2119 		/*
2120 		printf("syscall: %s(%lx,%lx,%lx,%lx,%lx,%lx) -> %d\n",
2121 			current_context->name,
2122 			current_context->args[0],
2123 			current_context->args[1],
2124 			current_context->args[2],
2125 			current_context->args[3],
2126 			current_context->args[4],
2127 			current_context->args[5], ret);
2128 		*/
2129 
2130 
2131 		if (current_context->type == SYSCALL_TIMED_OUT) {
2132 			/*
2133 			 *  Remember syscalls that block for too long so we don't retry them
2134 			 */
2135 			hash_table_add(hash, syscall_num, current_context->args, SYSCALL_TIMED_OUT);
2136 		} else if (ret == 0) {
2137 			/*
2138 			 *  For this child we remember syscalls that don't fail
2139 			 *  so we don't retry them
2140 			 */
2141 			hash_table_add(hash, syscall_num, current_context->args, SYSCALL_ERRNO_ZERO);
2142 		}
2143 		current_context->type = SYSCALL_FAIL;	/* it just failed */
2144 		return;
2145 	}
2146 
2147 	switch (arg_bitmask) {
2148 	case ARG_NONE:
2149 		values = none_values;
2150 		num_values = 1;
2151 		break;
2152 	case ARG_RND:
2153 		/*
2154 		 *  Provide some 'random' values
2155 		 */
2156 		rnd_values[0] = stress_mwc64();
2157 		rnd_values[1] = SHR_UL(stress_mwc32(), 20);
2158 		rnd_values[2] = (unsigned long)small_ptr;
2159 		rnd_values[3] = (unsigned long)page_ptr;
2160 		values = rnd_values;
2161 		num_values = 4;
2162 		break;
2163 	default:
2164 		/*
2165 		 *  Find the arg type to determine the arguments to use
2166 		 */
2167 		if (ARG_BITMASK(arg_bitmask, ARG_MISC)) {
2168 			/*
2169 			 *  Misc enumerated values
2170 			 */
2171 			for (i = 0; i < SIZEOF_ARRAY(arg_values); i++) {
2172 				if (ARG_MISC_ID(arg_bitmask) == ARG_MISC_ID(arg_values[i].bitmask)) {
2173 					values = arg_values[i].values;
2174 					num_values = arg_values[i].num_values;
2175 					break;
2176 				}
2177 			}
2178 		} else {
2179 			/*
2180 			 *  Mixed bitmask values
2181 			 */
2182 			for (i = 0; i < SIZEOF_ARRAY(arg_values); i++) {
2183 				if (ARG_BITMASK(arg_bitmask, arg_values[i].bitmask)) {
2184 					values = arg_values[i].values;
2185 					num_values = arg_values[i].num_values;
2186 					break;
2187 				}
2188 			}
2189 		}
2190 		break;
2191 	}
2192 
2193 	if (arg_bitmask & ARG_PTR_WR)
2194 		(void)memset(page_ptr_wr, 0, args->page_size);
2195 	/*
2196 	 *  This should not fail!
2197 	 */
2198 	if (!num_values) {
2199 		pr_dbg("%s: argument %d has bad bitmask %lx\n", args->name, arg_num, arg_bitmask);
2200 		current_context->args[arg_num] = 0;
2201 		return;
2202 	}
2203 
2204 	/*
2205 	 *  And permute and call all the argument values for this
2206 	 *  specific argument
2207 	 */
2208 	for (i = 0; i < num_values; i++) {
2209 		current_context->args[arg_num] = values[i];
2210 		syscall_permute(args, arg_num + 1, stress_syscall_arg, syscall_exercised);
2211 		current_context->args[arg_num] = 0;
2212 	}
2213 }
2214 
2215 /*
2216  *  Call a system call in a child context so we don't clobber
2217  *  the parent
2218  */
stress_do_syscall(const stress_args_t * args)2219 static inline int stress_do_syscall(const stress_args_t *args)
2220 {
2221 	pid_t pid;
2222 	int rc = 0;
2223 
2224 	(void)stress_mwc32();
2225 
2226 	if (!keep_stressing_flag())
2227 		return 0;
2228 
2229 	if (stress_drop_capabilities(args->name) < 0)
2230 		return EXIT_NO_RESOURCE;
2231 
2232 	pid = fork();
2233 	if (pid < 0) {
2234 		_exit(EXIT_NO_RESOURCE);
2235 	} else if (pid == 0) {
2236 		size_t i, n;
2237 		size_t reorder[SIZEOF_ARRAY(stress_syscall_args)];
2238 
2239 		/* We don't want bad ops clobbering this region */
2240 		stress_shared_unmap();
2241 		stress_process_dumpable(false);
2242 
2243 		/* Drop all capabilities */
2244 		if (stress_drop_capabilities(args->name) < 0) {
2245 			_exit(EXIT_NO_RESOURCE);
2246 		}
2247 		for (i = 0; i < SIZEOF_ARRAY(sigs); i++) {
2248 			if (stress_sighandler(args->name, sigs[i], stress_sig_handler_exit, NULL) < 0)
2249 				_exit(EXIT_FAILURE);
2250 		}
2251 
2252 		if (stress_sighandler(args->name, SIGALRM, stress_syscall_itimer_handler, NULL) < 0)
2253 			_exit(EXIT_FAILURE);
2254 
2255 		(void)setpgid(0, g_pgrp);
2256 		stress_parent_died_alarm();
2257 		(void)sched_settings_apply(true);
2258 		stress_mwc_reseed();
2259 
2260 		while (keep_stressing_flag()) {
2261 			const size_t sz = SIZEOF_ARRAY(reorder);
2262 
2263 			for (i = 0; i < SIZEOF_ARRAY(reorder); i++) {
2264 				reorder[i] = i;
2265 			}
2266 
2267 			/*
2268 			 * 50% of the time we do syscalls in shuffled order
2269 			 */
2270 			if (0 && stress_mwc1()) {
2271 				/*
2272 				 *  Shuffle syscall order
2273 				 */
2274 				for (n = 0; n < 5; n++) {
2275 					for (i = 0; i < SIZEOF_ARRAY(reorder); i++) {
2276 						register size_t tmp;
2277 						register size_t j = (sz == 0) ? 0 : stress_mwc32() % sz;
2278 
2279 						tmp = reorder[i];
2280 						reorder[i] = reorder[j];
2281 						reorder[j] = tmp;
2282 					}
2283 				}
2284 			}
2285 
2286 			for (i = 0; keep_stressing(args) && (i < SIZEOF_ARRAY(stress_syscall_args)); i++) {
2287 				size_t idx;
2288 				const size_t j = reorder[i];
2289 
2290 				(void)memset(current_context->args, 0, sizeof(current_context->args));
2291 				current_context->syscall = stress_syscall_args[j].syscall;
2292 				idx = (uintptr_t)&stress_syscall_args[j] -
2293 				       (uintptr_t)stress_syscall_args;
2294 				current_context->idx = idx;
2295 				current_context->name = stress_syscall_args[j].name;
2296 
2297 				/* Ignore too many crashes from this system call */
2298 				if (current_context->crash_count[idx] >= MAX_CRASHES)
2299 					continue;
2300 				syscall_permute(args, 0, &stress_syscall_args[j], &stress_syscall_exercised[j]);
2301 			}
2302 			hash_table_free();
2303 		}
2304 		_exit(EXIT_SUCCESS);
2305 	} else {
2306 		int ret, status;
2307 
2308 		/*
2309 		 *  Don't use retry shim_waitpid here, we want to force
2310 		 *  kill the child no matter what happens at this point
2311 		 */
2312 		ret = waitpid(pid, &status, 0);
2313 		if (ret < 0) {
2314 			/*
2315 			 *  SIGALRM or a waitpid failure, so force
2316 			 *  kill and reap of child to make sure
2317 			 *  it is really dead and buried
2318 			 */
2319 			(void)kill(pid, SIGKILL);
2320 			ret = waitpid(pid, &status, 0);
2321 			(void)ret;
2322 		}
2323 		if (current_context->type == SYSCALL_CRASH) {
2324 			const size_t idx = current_context->idx;
2325 
2326 			hash_table_add(current_context->hash,
2327 				current_context->syscall,
2328 				current_context->args,
2329 				SYSCALL_CRASH);
2330 
2331 			if (idx < SIZEOF_ARRAY(stress_syscall_args))
2332 				current_context->crash_count[idx]++;
2333 		}
2334 		rc = WEXITSTATUS(status);
2335 	}
2336 	return rc;
2337 }
2338 
stress_sysinval_child(const stress_args_t * args,void * context)2339 static int stress_sysinval_child(const stress_args_t *args, void *context)
2340 {
2341 	(void)context;
2342 
2343 	do {
2344 		(void)stress_mwc32();
2345 		stress_do_syscall(args);
2346 	} while (keep_stressing(args));
2347 
2348 	return EXIT_SUCCESS;
2349 }
2350 
2351 /*
2352  *  stress_sysinval
2353  *	stress system calls with bad addresses
2354  */
stress_sysinval(const stress_args_t * args)2355 static int stress_sysinval(const stress_args_t *args)
2356 {
2357 	int ret, rc = EXIT_NO_RESOURCE;
2358 	size_t i, syscalls_exercised, syscalls_unique;
2359 	const size_t page_size = args->page_size;
2360 	const size_t current_context_size =
2361 		(sizeof(*current_context) + page_size) & ~(page_size - 1);
2362 	size_t small_ptr_size = page_size << 1;		/* cppcheck-suppress duplicateAssignExpression */
2363 	size_t page_ptr_wr_size = page_size << 1;	/* cppcheck-suppress duplicateAssignExpression */
2364 	char filename[PATH_MAX];
2365 	const size_t stress_syscall_args_sz = SIZEOF_ARRAY(stress_syscall_args);
2366 	const size_t stress_syscall_exercised_sz = stress_syscall_args_sz * sizeof(*stress_syscall_exercised);
2367 	bool syscall_exercised[stress_syscall_args_sz];
2368 	bool syscall_unique[stress_syscall_args_sz];
2369 
2370 	time_end = stress_time_now() + (double)g_opt_timeout;
2371 
2372 	/*
2373 	 *  Run-time sanity check of zero syscalls, maybe __NR or SYS_ is not
2374 	 *  defined.
2375 	 */
2376 	if (stress_syscall_args_sz == 0) {
2377 		if (args->instance == 0)
2378 			pr_inf_skip("%s: no system calls detected during build, skipping stressor\n",
2379 				args->name);
2380 		return EXIT_NO_RESOURCE;
2381 	}
2382 
2383 	sockfds[0] = socket(AF_UNIX, SOCK_STREAM, 0);
2384 
2385 	ret = stress_temp_dir_mk_args(args);
2386 	if (ret < 0)
2387 		return exit_status(-ret);
2388 
2389 	(void)stress_temp_filename_args(args,
2390 		filename, sizeof(filename), stress_mwc32());
2391 	fds[0] = open(filename, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
2392 	if (fds[0] < 0) {
2393 		pr_fail("%s: open %s failed, errno=%d (%s)\n",
2394 			args->name, filename, errno, strerror(errno));
2395 		goto err_dir;
2396 	}
2397 	(void)unlink(filename);
2398 
2399 	stress_syscall_exercised =
2400 		(bool *)mmap(NULL, stress_syscall_exercised_sz,
2401 				PROT_READ | PROT_WRITE,
2402 				MAP_SHARED | MAP_ANONYMOUS,
2403 				-1, 0);
2404 	if (stress_syscall_exercised == MAP_FAILED) {
2405 		pr_fail("%s: mmap failed, errno=%d (%s)\n",
2406 			args->name, errno, strerror(errno));
2407 		goto tidy;
2408 	}
2409 
2410 	current_context = (syscall_current_context_t*)
2411 		mmap(NULL, current_context_size, PROT_READ | PROT_WRITE,
2412 			MAP_SHARED | MAP_ANONYMOUS, -1, 0);
2413 	if (current_context == MAP_FAILED) {
2414 		pr_fail("%s: mmap failed, errno=%d (%s)\n",
2415 			args->name, errno, strerror(errno));
2416 		goto tidy;
2417 	}
2418 
2419 	small_ptr = (uint8_t *)mmap(NULL, small_ptr_size, PROT_READ | PROT_WRITE,
2420 		MAP_SHARED | MAP_ANONYMOUS, -1, 0);
2421 	if (small_ptr == MAP_FAILED) {
2422 		pr_fail("%s: mmap failed, errno=%d (%s)\n",
2423 			args->name, errno, strerror(errno));
2424 		goto tidy;
2425 	}
2426 #if defined(HAVE_MPROTECT)
2427 	(void)mprotect((void *)(small_ptr + page_size), page_size, PROT_NONE);
2428 #else
2429 	(void)munmap((void *)(small_ptr + page_size), page_size);
2430 	small_ptr_size -= page_size;
2431 #endif
2432 
2433 	page_ptr = (uint8_t *)mmap(NULL, page_size, PROT_NONE,
2434 		MAP_SHARED | MAP_ANONYMOUS, -1, 0);
2435 	if (page_ptr == MAP_FAILED) {
2436 		pr_fail("%s: mmap failed, errno=%d (%s)\n",
2437 			args->name, errno, strerror(errno));
2438 		goto tidy;
2439 	}
2440 
2441 	page_ptr_wr = (uint8_t *)mmap(NULL, page_ptr_wr_size, PROT_WRITE,
2442 		MAP_SHARED | MAP_ANONYMOUS, -1, 0);
2443 	if (page_ptr_wr == MAP_FAILED) {
2444 		pr_fail("%s: mmap failed, errno=%d (%s)\n",
2445 			args->name, errno, strerror(errno));
2446 		goto tidy;
2447 	}
2448 	small_ptr_wr = page_ptr_wr + page_size - 1;
2449 #if defined(HAVE_MPROTECT)
2450 	(void)mprotect((void *)(page_ptr_wr + page_size), page_size, PROT_NONE);
2451 #else
2452 	(void)munmap((void *)(page_ptr_wr + page_size), page_size);
2453 	page_ptr_wr_size -= page_size;
2454 #endif
2455 
2456 
2457 	sockaddrs[0] = (long)(small_ptr + page_size - 1);
2458 	sockaddrs[1] = (long)page_ptr;
2459 	ptrs[0] = (unsigned long)(small_ptr + page_size -1);
2460 	ptrs[1] = (unsigned long)page_ptr;
2461 	non_null_ptrs[0] = (unsigned long)(small_ptr + page_size -1);
2462 	non_null_ptrs[1] = (unsigned long)page_ptr;
2463 	futex_ptrs[0] = (unsigned long)(small_ptr + page_size -1);
2464 	futex_ptrs[1] = (unsigned long)page_ptr;
2465 
2466 	stress_set_proc_state(args->name, STRESS_STATE_RUN);
2467 
2468 	rc = stress_oomable_child(args, NULL, stress_sysinval_child, STRESS_OOMABLE_DROP_CAP);
2469 
2470 	(void)memset(syscall_exercised, 0, sizeof(syscall_exercised));
2471 	(void)memset(syscall_unique, 0, sizeof(syscall_unique));
2472 	syscalls_exercised = 0;
2473 	syscalls_unique = 0;
2474 
2475 	/*
2476 	 *  Determine the number of syscalls that we can test vs
2477  	 *  the number of syscalls actually exercised
2478 	 */
2479 	for (i = 0; i < stress_syscall_args_sz; i++) {
2480 		unsigned long syscall_num = stress_syscall_args[i].syscall;
2481 		size_t exercised = 0, unique = 0;
2482 		size_t j;
2483 
2484 		for (j = 0; j < stress_syscall_args_sz; j++) {
2485 			if (syscall_num == stress_syscall_args[j].syscall) {
2486 				if (!syscall_unique[j]) {
2487 					syscall_unique[j] = true;
2488 					unique = true;
2489 				}
2490 				if (!syscall_exercised[j] &&
2491 				    stress_syscall_exercised[j]) {
2492 					syscall_exercised[j] = true;
2493 					exercised = true;
2494 				}
2495 			}
2496 		}
2497 		if (unique)
2498 			syscalls_unique++;
2499 		if (exercised)
2500 			syscalls_exercised++;
2501 	}
2502 	pr_dbg("%s: %zd of %zd (%.2f%%) unique system calls exercised\n",
2503 		args->name, syscalls_exercised, syscalls_unique,
2504 		(double)(syscalls_exercised * 100) / (double)syscalls_unique);
2505 	pr_dbg("%s: %" PRIu64 " unique syscalls argument combinations causing premature child termination\n",
2506 		args->name, current_context->skip_crashed);
2507 	pr_dbg("%s: ignored %" PRIu64 " unique syscall patterns that were not failing and %" PRIu64 " that timed out\n",
2508 		args->name, current_context->skip_errno_zero, current_context->skip_timed_out);
2509 
2510 	set_counter(args, current_context->counter);
2511 
2512 tidy:
2513 	stress_set_proc_state(args->name, STRESS_STATE_DEINIT);
2514 	if (stress_syscall_exercised && stress_syscall_exercised != MAP_FAILED)
2515 		(void)munmap((void *)stress_syscall_exercised, stress_syscall_exercised_sz);
2516 	if (page_ptr_wr && page_ptr_wr != MAP_FAILED)
2517 		(void)munmap((void *)page_ptr_wr, page_ptr_wr_size);
2518 	if (page_ptr && page_ptr != MAP_FAILED)
2519 		(void)munmap((void *)page_ptr, page_size);
2520 	if (small_ptr && small_ptr != MAP_FAILED)
2521 		(void)munmap((void *)small_ptr, small_ptr_size);
2522 	if (current_context && current_context != MAP_FAILED)
2523 		(void)munmap((void *)current_context, current_context_size);
2524 	if (sockfds[0] >= 0)
2525 		(void)close((int)sockfds[0]);
2526 	if (fds[0] >= 0)
2527 		(void)close((int)fds[0]);
2528 
2529 err_dir:
2530 	stress_set_proc_state(args->name, STRESS_STATE_DEINIT);
2531 	(void)stress_temp_dir_rm_args(args);
2532 	hash_table_free();
2533 
2534 	return rc;
2535 }
2536 
2537 stressor_info_t stress_sysinval_info = {
2538 	.stressor = stress_sysinval,
2539 	.class = CLASS_OS | CLASS_PATHOLOGICAL,
2540 	.help = help
2541 };
2542 #else
2543 stressor_info_t stress_sysinval_info = {
2544 	.stressor = stress_not_implemented,
2545 	.class = CLASS_OS | CLASS_PATHOLOGICAL,
2546 	.help = help
2547 };
2548 #endif
2549