1use crate::arch::SyscallArgType;
2use libc::{c_ulonglong, user_regs_struct};
3use std::ops::Index;
4use syscalls::aarch64::Sysno;
5use syscalls::SysnoSet;
6
7#[allow(clippy::enum_glob_use)]
8use syscalls::aarch64::Sysno::*;
9
10pub static TRACE_DESC: SysnoSet = SysnoSet::new(&[
11 fsetxattr,
13 fgetxattr,
14 flistxattr,
15 fremovexattr,
16 eventfd2,
17 epoll_create1,
18 epoll_ctl,
19 epoll_pwait,
20 dup,
21 dup3,
22 fcntl,
23 inotify_init1,
24 inotify_add_watch,
25 inotify_rm_watch,
26 ioctl,
27 flock,
28 mknodat,
29 mkdirat,
30 unlinkat,
31 symlinkat,
32 linkat,
33 renameat,
34 fstatfs,
35 ftruncate,
36 fallocate,
37 faccessat,
38 fchdir,
39 fchmod,
40 fchmodat,
41 fchownat,
42 fchown,
43 openat,
44 close,
45 pipe2,
46 getdents64,
47 lseek,
48 read,
49 write,
50 readv,
51 writev,
52 pread64,
53 pwrite64,
54 preadv,
55 pwritev,
56 sendfile,
57 pselect6,
58 ppoll,
59 signalfd4,
60 vmsplice,
61 splice,
62 tee,
63 readlinkat,
64 fstatat,
65 fstat,
66 fsync,
67 fdatasync,
68 sync_file_range,
69 timerfd_create,
70 timerfd_settime,
71 timerfd_gettime,
72 utimensat,
73 mq_open,
74 mq_timedsend,
75 mq_timedreceive,
76 mq_notify,
77 mq_getsetattr,
78 readahead,
79 mmap,
80 fadvise64,
81 perf_event_open,
82 fanotify_init,
83 fanotify_mark,
84 name_to_handle_at,
85 open_by_handle_at,
86 syncfs,
87 setns,
88 finit_module,
89 renameat2,
90 memfd_create,
91 bpf,
92 execveat,
93 userfaultfd,
94 copy_file_range,
95 preadv2,
96 pwritev2,
97 statx,
98 kexec_file_load,
99 pidfd_send_signal,
101 io_uring_setup,
102 io_uring_enter,
103 io_uring_register,
104 open_tree,
105 move_mount,
106 fsopen,
107 fsconfig,
108 fsmount,
109 fspick,
110 pidfd_open,
111 openat2,
112 pidfd_getfd,
113 faccessat2,
114 process_madvise,
115 epoll_pwait2,
116 mount_setattr,
117 quotactl_fd,
118 landlock_create_ruleset,
119 landlock_add_rule,
120 landlock_restrict_self,
121 memfd_secret,
122 process_mrelease,
123 cachestat,
124 fchmodat2,
125]);
126
127pub static TRACE_FILE: SysnoSet = SysnoSet::new(&[
128 setxattr,
130 lsetxattr,
131 getxattr,
132 lgetxattr,
133 listxattr,
134 llistxattr,
135 removexattr,
136 lremovexattr,
137 getcwd,
138 inotify_add_watch,
139 mknodat,
140 mkdirat,
141 unlinkat,
142 symlinkat,
143 linkat,
144 renameat,
145 umount2,
146 mount,
147 pivot_root,
148 statfs,
149 fstatfs,
150 truncate,
151 faccessat,
152 chdir,
153 chroot,
154 fchmodat,
155 fchownat,
156 openat,
157 quotactl,
158 readlinkat,
159 fstatat,
160 fstat,
161 utimensat,
162 acct,
163 execve,
164 swapon,
165 swapoff,
166 fanotify_mark,
167 name_to_handle_at,
168 renameat2,
169 execveat,
170 statx,
171 open_tree,
173 move_mount,
174 fsconfig,
175 fspick,
176 openat2,
177 faccessat2,
178 mount_setattr,
179 fchmodat2,
180]);
181
182pub static TRACE_IPC: SysnoSet = SysnoSet::new(&[
183 msgget, msgctl, msgrcv, msgsnd, semget, semctl, semtimedop, semop, shmget, shmctl, shmat, shmdt,
184]);
185
186pub static TRACE_NETWORK: SysnoSet = SysnoSet::new(&[
187 sendfile,
188 socket,
189 socketpair,
190 bind,
191 listen,
192 accept,
193 connect,
194 getsockname,
195 getpeername,
196 sendto,
197 recvfrom,
198 setsockopt,
199 getsockopt,
200 shutdown,
201 sendmsg,
202 recvmsg,
203 accept4,
204 recvmmsg,
205 sendmmsg,
206]);
207
208pub static TRACE_PROCESS: SysnoSet = SysnoSet::new(&[
209 exit,
211 exit_group,
212 waitid,
213 kill,
214 tkill,
215 tgkill,
216 rt_sigqueueinfo,
217 clone,
218 execve,
219 rt_tgsigqueueinfo,
220 wait4,
221 execveat,
222 pidfd_send_signal,
224 clone3,
225]);
226
227pub static TRACE_SIGNAL: SysnoSet = SysnoSet::new(&[
228 statfs,
230 fstatfs,
231 signalfd4,
232 fstatat,
233 fstat,
234 kill,
235 tkill,
236 tgkill,
237 sigaltstack,
238 rt_sigsuspend,
239 rt_sigaction,
240 rt_sigprocmask,
241 rt_sigpending,
242 rt_sigtimedwait,
243 rt_sigqueueinfo,
244 rt_sigreturn,
245 execve,
246 rt_tgsigqueueinfo,
247 execveat,
248 statx,
249 pidfd_send_signal,
251 io_uring_enter,
252]);
253
254pub static TRACE_MEMORY: SysnoSet = SysnoSet::new(&[
255 io_setup,
257 io_destroy,
258 shmat,
259 shmdt,
260 brk,
261 munmap,
262 mremap,
263 mmap,
264 mprotect,
265 msync,
266 mlock,
267 munlock,
268 mlockall,
269 munlockall,
270 mincore,
271 madvise,
272 remap_file_pages,
273 mbind,
274 get_mempolicy,
275 set_mempolicy,
276 migrate_pages,
277 move_pages,
278 mlock2,
279 pkey_mprotect,
280 io_uring_register,
282 set_mempolicy_home_node,
283 map_shadow_stack,
284]);
285
286pub static TRACE_STAT: SysnoSet = SysnoSet::new(&[fstatat, fstat, statx]);
287pub static TRACE_LSTAT: SysnoSet = SysnoSet::new(&[]);
288pub static TRACE_FSTAT: SysnoSet = SysnoSet::new(&[fstatat, fstat, statx]);
289pub static TRACE_STAT_LIKE: SysnoSet = SysnoSet::new(&[fstatat, fstat, statx]);
290pub static TRACE_STATFS: SysnoSet = SysnoSet::new(&[statfs, fstatfs]);
291pub static TRACE_FSTATFS: SysnoSet = SysnoSet::new(&[fstatfs]);
292pub static TRACE_STATFS_LIKE: SysnoSet = SysnoSet::new(&[statfs, fstatfs]);
293
294pub static TRACE_PURE: SysnoSet =
295 SysnoSet::new(&[getpid, getppid, getuid, geteuid, getgid, getegid, gettid]);
296
297pub static TRACE_CREDS: SysnoSet = SysnoSet::new(&[
298 capget,
299 capset,
300 clock_settime,
301 clock_gettime,
302 clock_getres,
303 setregid,
304 setgid,
305 setreuid,
306 setuid,
307 setresuid,
308 getresuid,
309 setresgid,
310 getresgid,
311 setfsuid,
312 setfsgid,
313 getgroups,
314 setgroups,
315 prctl,
316 gettimeofday,
317 settimeofday,
318 adjtimex,
319 getuid,
320 geteuid,
321 getgid,
322 getegid,
323 clock_adjtime,
324]);
325
326pub static TRACE_CLOCK: SysnoSet = SysnoSet::new(&[
327 clock_settime,
328 clock_gettime,
329 clock_getres,
330 gettimeofday,
331 settimeofday,
332 adjtimex,
333 clock_adjtime,
334]);
335
336macro_rules! syscall {
337 ($name:ident $(,)?) => {
338 Some((Sysno::$name, [None, None, None, None, None, None]))
339 };
340 ($name:ident, $arg0:ident $(,)?) => {
341 Some((Sysno::$name, [$arg0, None, None, None, None, None]))
342 };
343 ($name:ident, $arg0:ident, $arg1:ident $(,)?) => {
344 Some((Sysno::$name, [$arg0, $arg1, None, None, None, None]))
345 };
346 ($name:ident, $arg0:ident, $arg1:ident, $arg2:ident $(,)?) => {
347 Some((Sysno::$name, [$arg0, $arg1, $arg2, None, None, None]))
348 };
349 ($name:ident, $arg0:ident, $arg1:ident, $arg2:ident, $arg3:ident $(,)?) => {
350 Some((Sysno::$name, [$arg0, $arg1, $arg2, $arg3, None, None]))
351 };
352 ($name:ident, $arg0:ident, $arg1:ident, $arg2:ident, $arg3:ident, $arg4:ident $(,)?) => {
353 Some((Sysno::$name, [$arg0, $arg1, $arg2, $arg3, $arg4, None]))
354 };
355 ($name:ident, $arg0:ident, $arg1:ident, $arg2:ident, $arg3:ident, $arg4:ident, $arg5:ident $(,)?) => {
356 Some((Sysno::$name, [$arg0, $arg1, $arg2, $arg3, $arg4, $arg5]))
357 };
358}
359
360const ADDR: Option<SyscallArgType> = Some(SyscallArgType::Addr);
361const INT: Option<SyscallArgType> = Some(SyscallArgType::Int);
362const STR: Option<SyscallArgType> = Some(SyscallArgType::Str);
363
364pub struct Aarch64Syscalls {
365 _0: [Option<(Sysno, [Option<SyscallArgType>; 6])>; 244],
366 _260: [Option<(Sysno, [Option<SyscallArgType>; 6])>; 35],
367 _424: [Option<(Sysno, [Option<SyscallArgType>; 6])>; 29],
368}
369
370impl Aarch64Syscalls {
371 pub fn get(&self, index: usize) -> Option<&Option<(Sysno, [Option<SyscallArgType>; 6])>> {
372 let result = match index {
373 0..=243 => &self._0[index],
374 260..=294 => &self._260[index - 260],
375 424..=452 => &self._424[index - 424],
376 _ => return None,
377 };
378 Some(result)
379 }
380}
381
382impl Index<usize> for Aarch64Syscalls {
383 type Output = Option<(Sysno, [Option<SyscallArgType>; 6])>;
384
385 fn index(&self, index: usize) -> &Self::Output {
386 self.get(index).expect("unimplemented syscall")
387 }
388}
389
390pub static SYSCALLS: Aarch64Syscalls = Aarch64Syscalls {
391 _0: [
392 syscall!(io_setup, INT, ADDR),
393 syscall!(io_destroy, INT),
394 syscall!(io_submit, INT, INT, ADDR),
395 syscall!(io_cancel, INT, ADDR, ADDR),
396 syscall!(io_getevents, INT, INT, INT, ADDR, ADDR),
397 syscall!(setxattr, STR, STR, ADDR, INT, INT),
398 syscall!(lsetxattr, STR, STR, ADDR, INT, INT),
399 syscall!(fsetxattr, INT, STR, ADDR, INT, INT),
400 syscall!(getxattr, STR, STR, ADDR, INT),
401 syscall!(lgetxattr, STR, STR, ADDR, INT),
402 syscall!(fgetxattr, INT, STR, ADDR, INT),
403 syscall!(listxattr, STR, STR, INT),
404 syscall!(llistxattr, STR, STR, INT),
405 syscall!(flistxattr, INT, STR, INT),
406 syscall!(removexattr, STR, STR),
407 syscall!(lremovexattr, STR, STR),
408 syscall!(fremovexattr, INT, STR),
409 syscall!(getcwd, STR, INT),
410 syscall!(lookup_dcookie, INT, STR, INT),
411 syscall!(eventfd2, INT, INT),
412 syscall!(epoll_create1, INT),
413 syscall!(epoll_ctl, INT, INT, INT, ADDR),
414 syscall!(epoll_pwait, INT, ADDR, INT, INT, ADDR, INT),
415 syscall!(dup, INT),
416 syscall!(dup3, INT, INT, INT),
417 syscall!(fcntl, INT, INT, INT),
418 syscall!(inotify_init1, INT),
419 syscall!(inotify_add_watch, INT, STR, INT),
420 syscall!(inotify_rm_watch, INT, INT),
421 syscall!(ioctl, INT, INT, INT),
422 syscall!(ioprio_set, INT, INT, INT),
423 syscall!(ioprio_get, INT, INT),
424 syscall!(flock, INT, INT),
425 syscall!(mknodat, INT, STR, INT, INT),
426 syscall!(mkdirat, INT, STR, INT),
427 syscall!(unlinkat, INT, STR, INT),
428 syscall!(symlinkat, STR, INT, STR),
429 syscall!(linkat, INT, STR, INT, STR, INT),
430 syscall!(renameat, INT, STR, INT, STR),
431 syscall!(umount2, STR, INT),
432 syscall!(mount, STR, STR, STR, INT, ADDR),
433 syscall!(pivot_root, STR, STR),
434 syscall!(nfsservctl, INT, ADDR, ADDR),
435 syscall!(statfs, STR, ADDR),
436 syscall!(fstatfs, INT, ADDR),
437 syscall!(truncate, STR, INT),
438 syscall!(ftruncate, INT, INT),
439 syscall!(fallocate, INT, INT, INT, INT),
440 syscall!(faccessat, INT, STR, INT),
441 syscall!(chdir, STR),
442 syscall!(fchdir, INT),
443 syscall!(chroot, STR),
444 syscall!(fchmod, INT, INT),
445 syscall!(fchmodat, INT, STR, INT),
446 syscall!(fchownat, INT, STR, INT, INT, INT),
447 syscall!(fchown, INT, INT, INT),
448 syscall!(openat, INT, STR, INT, INT),
449 syscall!(close, INT),
450 syscall!(vhangup),
451 syscall!(pipe2, ADDR, INT),
452 syscall!(quotactl, INT, STR, INT, ADDR),
453 syscall!(getdents64, INT, ADDR, INT),
454 syscall!(lseek, INT, INT, INT),
455 syscall!(read, INT, STR, INT),
456 syscall!(write, INT, STR, INT),
457 syscall!(readv, INT, ADDR, INT),
458 syscall!(writev, INT, ADDR, INT),
459 syscall!(pread64, INT, STR, INT, INT),
460 syscall!(pwrite64, INT, STR, INT, INT),
461 syscall!(preadv, INT, ADDR, INT, INT, INT),
462 syscall!(pwritev, INT, ADDR, INT, INT, INT),
463 syscall!(sendfile, INT, INT, ADDR, INT),
464 syscall!(pselect6, INT, ADDR, ADDR, ADDR, ADDR, ADDR),
465 syscall!(ppoll, ADDR, INT, ADDR, ADDR, INT),
466 syscall!(signalfd4, INT, ADDR, INT, INT),
467 syscall!(vmsplice, INT, ADDR, INT, INT),
468 syscall!(splice, INT, ADDR, INT, ADDR, INT, INT),
469 syscall!(tee, INT, INT, INT, INT),
470 syscall!(readlinkat, INT, STR, STR, INT),
471 syscall!(fstatat, INT, STR, ADDR, INT),
472 syscall!(fstat, INT, ADDR),
473 syscall!(sync),
474 syscall!(fsync, INT),
475 syscall!(fdatasync, INT),
476 syscall!(sync_file_range, INT, INT, INT, INT),
477 syscall!(timerfd_create, INT, INT),
478 syscall!(timerfd_settime, INT, INT, ADDR, ADDR),
479 syscall!(timerfd_gettime, INT, ADDR),
480 syscall!(utimensat, INT, STR, ADDR, INT),
481 syscall!(acct, STR),
482 syscall!(capget, ADDR, ADDR),
483 syscall!(capset, ADDR, ADDR),
484 syscall!(personality, INT),
485 syscall!(exit, INT),
486 syscall!(exit_group, INT),
487 syscall!(waitid, INT, INT, ADDR, INT, ADDR),
488 syscall!(set_tid_address, ADDR),
489 syscall!(unshare, INT),
490 syscall!(futex, ADDR, INT, INT, ADDR, ADDR, INT),
491 syscall!(set_robust_list, ADDR, INT),
492 syscall!(get_robust_list, INT, ADDR, ADDR),
493 syscall!(nanosleep, ADDR, ADDR),
494 syscall!(getitimer, INT, ADDR),
495 syscall!(setitimer, INT, ADDR, ADDR),
496 syscall!(kexec_load, INT, INT, ADDR, INT),
497 syscall!(init_module, ADDR, INT, STR),
498 syscall!(delete_module, STR, INT),
499 syscall!(timer_create, INT, ADDR, ADDR),
500 syscall!(timer_gettime, INT, ADDR),
501 syscall!(timer_getoverrun, INT),
502 syscall!(timer_settime, INT, INT, ADDR, ADDR),
503 syscall!(timer_delete, INT),
504 syscall!(clock_settime, INT, ADDR),
505 syscall!(clock_gettime, INT, ADDR),
506 syscall!(clock_getres, INT, ADDR),
507 syscall!(clock_nanosleep, INT, INT, ADDR, ADDR),
508 syscall!(syslog, INT, STR, INT),
509 syscall!(ptrace, INT, INT, INT, INT),
510 syscall!(sched_setparam, INT, ADDR),
511 syscall!(sched_setscheduler, INT, INT, ADDR),
512 syscall!(sched_getscheduler, INT),
513 syscall!(sched_getparam, INT, ADDR),
514 syscall!(sched_setaffinity, INT, INT, ADDR),
515 syscall!(sched_getaffinity, INT, INT, ADDR),
516 syscall!(sched_yield),
517 syscall!(sched_get_priority_max, INT),
518 syscall!(sched_get_priority_min, INT),
519 syscall!(sched_rr_get_interval, INT, ADDR),
520 syscall!(restart_syscall),
521 syscall!(kill, INT, INT),
522 syscall!(tkill, INT, INT),
523 syscall!(tgkill, INT, INT, INT),
524 syscall!(sigaltstack, ADDR, ADDR),
525 syscall!(rt_sigsuspend, ADDR, INT),
526 syscall!(rt_sigaction, INT, ADDR, ADDR, INT),
527 syscall!(rt_sigprocmask, INT, ADDR, ADDR, INT),
528 syscall!(rt_sigpending, ADDR, INT),
529 syscall!(rt_sigtimedwait, ADDR, ADDR, ADDR, INT),
530 syscall!(rt_sigqueueinfo, INT, INT, ADDR),
531 syscall!(rt_sigreturn),
532 syscall!(setpriority, INT, INT, INT),
533 syscall!(getpriority, INT, INT),
534 syscall!(reboot, INT, INT, INT, ADDR),
535 syscall!(setregid, INT, INT),
536 syscall!(setgid, INT),
537 syscall!(setreuid, INT, INT),
538 syscall!(setuid, INT),
539 syscall!(setresuid, INT, INT, INT),
540 syscall!(getresuid, ADDR, ADDR, ADDR),
541 syscall!(setresgid, INT, INT, INT),
542 syscall!(getresgid, ADDR, ADDR, ADDR),
543 syscall!(setfsuid, INT),
544 syscall!(setfsgid, INT),
545 syscall!(times, ADDR),
546 syscall!(setpgid, INT, INT),
547 syscall!(getpgid, INT),
548 syscall!(getsid, INT),
549 syscall!(setsid),
550 syscall!(getgroups, INT, ADDR),
551 syscall!(setgroups, INT, ADDR),
552 syscall!(uname, ADDR),
553 syscall!(sethostname, STR, INT),
554 syscall!(setdomainname, STR, INT),
555 syscall!(getrlimit, INT, ADDR),
556 syscall!(setrlimit, INT, ADDR),
557 syscall!(getrusage, INT, ADDR),
558 syscall!(umask, INT),
559 syscall!(prctl, INT, INT, INT, INT, INT),
560 syscall!(getcpu, ADDR, ADDR, ADDR),
561 syscall!(gettimeofday, ADDR, ADDR),
562 syscall!(settimeofday, ADDR, ADDR),
563 syscall!(adjtimex, ADDR),
564 syscall!(getpid),
565 syscall!(getppid),
566 syscall!(getuid),
567 syscall!(geteuid),
568 syscall!(getgid),
569 syscall!(getegid),
570 syscall!(gettid),
571 syscall!(sysinfo, ADDR),
572 syscall!(mq_open, STR, INT, INT, ADDR),
573 syscall!(mq_unlink, STR),
574 syscall!(mq_timedsend, INT, STR, INT, INT, ADDR),
575 syscall!(mq_timedreceive, INT, STR, INT, ADDR, ADDR),
576 syscall!(mq_notify, INT, ADDR),
577 syscall!(mq_getsetattr, INT, ADDR, ADDR),
578 syscall!(msgget, INT, INT),
579 syscall!(msgctl, INT, INT, ADDR),
580 syscall!(msgrcv, INT, ADDR, INT, INT, INT),
581 syscall!(msgsnd, INT, ADDR, INT, INT),
582 syscall!(semget, INT, INT, INT),
583 syscall!(semctl, INT, INT, INT, INT),
584 syscall!(semtimedop, INT, ADDR, INT, ADDR),
585 syscall!(semop, INT, ADDR, INT),
586 syscall!(shmget, INT, INT, INT),
587 syscall!(shmctl, INT, INT, ADDR),
588 syscall!(shmat, INT, STR, INT),
589 syscall!(shmdt, STR),
590 syscall!(socket, INT, INT, INT),
591 syscall!(socketpair, INT, INT, INT, ADDR),
592 syscall!(bind, INT, ADDR, INT),
593 syscall!(listen, INT, INT),
594 syscall!(accept, INT, ADDR, ADDR),
595 syscall!(connect, INT, ADDR, INT),
596 syscall!(getsockname, INT, ADDR, ADDR),
597 syscall!(getpeername, INT, ADDR, ADDR),
598 syscall!(sendto, INT, ADDR, INT, INT, ADDR, INT),
599 syscall!(recvfrom, INT, ADDR, INT, INT, ADDR, ADDR),
600 syscall!(setsockopt, INT, INT, INT, STR, INT),
601 syscall!(getsockopt, INT, INT, INT, STR, ADDR),
602 syscall!(shutdown, INT, INT),
603 syscall!(sendmsg, INT, ADDR, INT),
604 syscall!(recvmsg, INT, ADDR, INT),
605 syscall!(readahead, INT, INT, INT),
606 syscall!(brk, INT),
607 syscall!(munmap, INT, INT),
608 syscall!(mremap, INT, INT, INT, INT, INT),
609 syscall!(add_key, STR, STR, ADDR, INT, INT),
610 syscall!(request_key, STR, STR, STR, INT),
611 syscall!(keyctl, INT, INT, INT, INT, INT),
612 syscall!(clone, INT, INT, ADDR, INT, ADDR),
613 syscall!(execve, STR, STR, STR),
614 syscall!(mmap, ADDR, INT, INT, INT, INT, INT),
615 syscall!(fadvise64, INT, INT, INT, INT),
616 syscall!(swapon, STR, INT),
617 syscall!(swapoff, STR),
618 syscall!(mprotect, INT, INT, INT),
619 syscall!(msync, INT, INT, INT),
620 syscall!(mlock, INT, INT),
621 syscall!(munlock, INT, INT),
622 syscall!(mlockall, INT),
623 syscall!(munlockall),
624 syscall!(mincore, INT, INT, ADDR),
625 syscall!(madvise, INT, INT, INT),
626 syscall!(remap_file_pages, INT, INT, INT, INT, INT),
627 syscall!(mbind, INT, INT, INT, ADDR, INT, INT),
628 syscall!(get_mempolicy, ADDR, ADDR, INT, INT, INT),
629 syscall!(set_mempolicy, INT, ADDR, INT),
630 syscall!(migrate_pages, INT, INT, ADDR, ADDR),
631 syscall!(move_pages, INT, INT, ADDR, ADDR, ADDR, INT),
632 syscall!(rt_tgsigqueueinfo, INT, INT, INT, ADDR),
633 syscall!(perf_event_open, ADDR, INT, INT, INT, INT),
634 syscall!(accept4, INT, ADDR, ADDR, INT),
635 syscall!(recvmmsg, INT, ADDR, INT, INT, ADDR),
636 ],
637 _260: [
638 syscall!(wait4, INT, ADDR, INT, ADDR),
639 syscall!(prlimit64, INT, INT, ADDR, ADDR),
640 syscall!(fanotify_init, INT, INT),
641 syscall!(fanotify_mark, INT, INT, INT, INT, STR),
642 syscall!(name_to_handle_at, INT, STR, ADDR, INT, INT),
643 syscall!(open_by_handle_at, INT, ADDR, INT),
644 syscall!(clock_adjtime, INT, ADDR),
645 syscall!(syncfs, INT),
646 syscall!(setns, INT, INT),
647 syscall!(sendmmsg, INT, ADDR, INT, INT),
648 syscall!(process_vm_readv, INT, ADDR, INT, ADDR, INT, INT),
649 syscall!(process_vm_writev, INT, ADDR, INT, ADDR, INT, INT),
650 syscall!(kcmp, INT, INT, INT, INT, INT),
651 syscall!(finit_module, INT, STR, INT),
652 syscall!(sched_setattr, INT, ADDR, INT),
653 syscall!(sched_getattr, INT, ADDR, INT, INT),
654 syscall!(renameat2, INT, STR, INT, STR, INT),
655 syscall!(seccomp, INT, INT, ADDR),
656 syscall!(getrandom, STR, INT, INT),
657 syscall!(memfd_create, STR, INT),
658 syscall!(bpf, INT, ADDR, INT),
659 syscall!(execveat, INT, STR, STR, STR, INT),
660 syscall!(userfaultfd, INT),
661 syscall!(membarrier, INT, INT, INT),
662 syscall!(mlock2, INT, INT, INT),
663 syscall!(copy_file_range, INT, ADDR, INT, ADDR, INT, INT),
664 syscall!(preadv2, INT, ADDR, INT, INT, INT, INT),
665 syscall!(pwritev2, INT, ADDR, INT, INT, INT, INT),
666 syscall!(pkey_mprotect, INT, INT, INT, INT),
667 syscall!(pkey_alloc, INT, INT),
668 syscall!(pkey_free, INT),
669 syscall!(statx, INT, STR, INT, INT, ADDR),
670 syscall!(io_pgetevents, INT, INT, INT, ADDR, ADDR, ADDR),
671 syscall!(rseq, ADDR, INT, INT, INT),
672 syscall!(kexec_file_load, INT, INT, INT, STR, INT),
673 ],
674 _424: [
675 syscall!(pidfd_send_signal, INT, INT, ADDR, INT),
676 syscall!(io_uring_setup, INT, ADDR),
677 syscall!(io_uring_enter, INT, INT, INT, INT, ADDR, INT),
678 syscall!(io_uring_register, INT, INT, ADDR, INT),
679 syscall!(open_tree, INT, STR, INT),
680 syscall!(move_mount, INT, STR, INT, STR, INT),
681 syscall!(fsopen, STR, INT),
682 syscall!(fsconfig, INT, INT, STR, ADDR, INT),
683 syscall!(fsmount, INT, INT, INT),
684 syscall!(fspick, INT, STR, INT),
685 syscall!(pidfd_open, INT, INT),
686 syscall!(clone3, ADDR, INT),
687 syscall!(close_range, INT, INT, INT),
688 syscall!(openat2, INT, STR, ADDR, INT),
689 syscall!(pidfd_getfd, INT, INT, INT),
690 syscall!(faccessat2, INT, STR, INT, INT),
691 syscall!(process_madvise, INT, ADDR, INT, INT, INT),
692 syscall!(epoll_pwait2, INT, ADDR, INT, ADDR, ADDR, INT),
693 syscall!(mount_setattr, INT, STR, INT, ADDR, INT),
694 syscall!(quotactl_fd, INT, INT, INT, ADDR),
695 syscall!(landlock_create_ruleset, ADDR, INT, INT),
696 syscall!(landlock_add_rule, INT, ADDR, ADDR, INT),
697 syscall!(landlock_restrict_self, INT, INT),
698 syscall!(memfd_secret, INT),
699 syscall!(process_mrelease, INT, INT),
700 syscall!(futex_waitv, ADDR, INT, INT, ADDR, INT),
701 syscall!(set_mempolicy_home_node, INT, INT, INT, INT),
702 syscall!(cachestat, INT, INT, INT, INT),
703 syscall!(fchmodat2, INT, STR, INT, INT),
704 ],
705};
706
707pub fn get_arg_value(registers: user_regs_struct, i: usize) -> c_ulonglong {
708 match i {
709 0 => registers.regs[0],
710 1 => registers.regs[1],
711 2 => registers.regs[2],
712 3 => registers.regs[3],
713 4 => registers.regs[4],
714 5 => registers.regs[5],
715 v => panic!("Invalid system call index {v}!"),
716 }
717}
718
719#[cfg(test)]
721mod tests {
722 use super::*;
723
724 #[test]
725 fn test_syscall_numbers() {
726 for (i, sysno, ..) in SYSCALLS._0.iter().enumerate() {
727 if let Some((sysno, _)) = sysno {
728 assert_eq!(i, sysno.id() as usize);
729 }
730 }
731 for (i, sysno, ..) in SYSCALLS._260.iter().enumerate() {
732 if let Some((sysno, _)) = sysno {
733 assert_eq!(i + 260, sysno.id() as usize);
734 }
735 }
736 for (i, sysno, ..) in SYSCALLS._424.iter().enumerate() {
737 if let Some((sysno, _)) = sysno {
738 assert_eq!(i + 424, sysno.id() as usize);
739 }
740 }
741 }
742}