use crate::arch::SyscallArgType;
use libc::{c_ulonglong, user_regs_struct};
use syscalls::x86_64::Sysno;
use syscalls::SysnoSet;
#[allow(clippy::enum_glob_use)]
use syscalls::x86_64::Sysno::*;
pub static TRACE_DESC: SysnoSet = SysnoSet::new(&[
read,
write,
open,
close,
fstat,
poll,
lseek,
mmap,
pread64,
pwrite64,
readv,
writev,
pipe,
select,
dup,
dup2,
sendfile,
fcntl,
flock,
fsync,
fdatasync,
ftruncate,
getdents,
fchdir,
creat,
fchmod,
fchown,
readahead,
fsetxattr,
fgetxattr,
flistxattr,
fremovexattr,
epoll_create,
getdents64,
fadvise64,
epoll_wait,
epoll_ctl,
mq_open,
mq_timedsend,
mq_timedreceive,
mq_notify,
mq_getsetattr,
inotify_init,
inotify_add_watch,
inotify_rm_watch,
openat,
mkdirat,
mknodat,
fchownat,
futimesat,
newfstatat,
unlinkat,
renameat,
linkat,
symlinkat,
readlinkat,
fchmodat,
faccessat,
pselect6,
ppoll,
splice,
tee,
sync_file_range,
vmsplice,
utimensat,
epoll_pwait,
signalfd,
timerfd_create,
eventfd,
fallocate,
timerfd_settime,
timerfd_gettime,
signalfd4,
eventfd2,
epoll_create1,
dup3,
pipe2,
inotify_init1,
preadv,
pwritev,
perf_event_open,
fanotify_init,
fanotify_mark,
name_to_handle_at,
open_by_handle_at,
syncfs,
setns,
finit_module,
renameat2,
memfd_create,
kexec_file_load,
bpf,
execveat,
userfaultfd,
copy_file_range,
preadv2,
pwritev2,
statx,
]);
pub static TRACE_FILE: SysnoSet = SysnoSet::new(&[
open,
stat,
lstat,
access,
shmget,
truncate,
getcwd,
chdir,
rename,
mkdir,
rmdir,
creat,
link,
unlink,
symlink,
readlink,
chmod,
chown,
lchown,
utime,
mknod,
uselib,
statfs,
fstatfs,
pivot_root,
chroot,
acct,
mount,
umount2,
swapon,
swapoff,
quotactl,
setxattr,
lsetxattr,
getxattr,
lgetxattr,
listxattr,
llistxattr,
removexattr,
lremovexattr,
utimes,
inotify_add_watch,
openat,
mkdirat,
mknodat,
fchownat,
futimesat,
newfstatat,
unlinkat,
renameat,
linkat,
symlinkat,
readlinkat,
fchmodat,
faccessat,
utimensat,
fanotify_mark,
name_to_handle_at,
renameat2,
statx,
]);
pub static TRACE_IPC: SysnoSet = SysnoSet::new(&[
shmget, shmat, shmctl, semget, semop, semctl, shmdt, msgget, msgsnd, msgrcv, msgctl, semtimedop,
]);
pub static TRACE_NETWORK: SysnoSet = SysnoSet::new(&[
socket,
connect,
accept,
sendto,
recvfrom,
sendmsg,
recvmsg,
shutdown,
bind,
listen,
getsockname,
getpeername,
socketpair,
setsockopt,
getsockopt,
getpmsg,
putpmsg,
recvmmsg,
sendmmsg,
]);
pub static TRACE_PROCESS: SysnoSet = SysnoSet::new(&[
clone,
fork,
vfork,
execve,
exit,
wait4,
kill,
rt_sigqueueinfo,
tkill,
exit_group,
tgkill,
waitid,
rt_tgsigqueueinfo,
execveat,
]);
pub static TRACE_SIGNAL: SysnoSet = SysnoSet::new(&[
rt_sigaction,
rt_sigprocmask,
rt_sigreturn,
pause,
rt_sigpending,
rt_sigtimedwait,
rt_sigqueueinfo,
rt_sigsuspend,
sigaltstack,
tkill,
signalfd,
signalfd4,
rt_tgsigqueueinfo,
pidfd_send_signal,
]);
pub static TRACE_MEMORY: SysnoSet = SysnoSet::new(&[
mmap,
mprotect,
munmap,
brk,
mremap,
msync,
mincore,
madvise,
shmat,
mlock,
munlock,
mlockall,
munlockall,
io_setup,
io_destroy,
remap_file_pages,
mbind,
set_mempolicy,
get_mempolicy,
migrate_pages,
move_pages,
mlock2,
pkey_mprotect,
]);
pub static TRACE_STAT: SysnoSet = SysnoSet::new(&[stat]);
pub static TRACE_LSTAT: SysnoSet = SysnoSet::new(&[lstat]);
pub static TRACE_FSTAT: SysnoSet = SysnoSet::new(&[fstat, newfstatat, statx]);
pub static TRACE_STAT_LIKE: SysnoSet = SysnoSet::new(&[stat, fstat, lstat, newfstatat, statx]);
pub static TRACE_STATFS: SysnoSet = SysnoSet::new(&[statfs]);
pub static TRACE_FSTATFS: SysnoSet = SysnoSet::new(&[fstatfs]);
pub static TRACE_STATFS_LIKE: SysnoSet = SysnoSet::new(&[ustat, statfs, fstatfs]);
pub static TRACE_PURE: SysnoSet = SysnoSet::new(&[
getpid, getuid, getgid, geteuid, getegid, getppid, getpgrp, gettid,
]);
pub static TRACE_CREDS: SysnoSet = SysnoSet::new(&[
getuid, getgid, setuid, setgid, geteuid, getegid, setreuid, setregid, getgroups, setgroups,
setresuid, getresuid, setresgid, getresgid, setfsuid, setfsgid, capget, capset, prctl,
]);
pub static TRACE_CLOCK: SysnoSet = SysnoSet::new(&[
gettimeofday,
adjtimex,
settimeofday,
time,
clock_settime,
clock_gettime,
clock_getres,
clock_adjtime,
]);
macro_rules! syscall {
($name:ident $(,)?) => {
Some((Sysno::$name, [None, None, None, None, None, None]))
};
($name:ident, $arg0:ident $(,)?) => {
Some((Sysno::$name, [$arg0, None, None, None, None, None]))
};
($name:ident, $arg0:ident, $arg1:ident $(,)?) => {
Some((Sysno::$name, [$arg0, $arg1, None, None, None, None]))
};
($name:ident, $arg0:ident, $arg1:ident, $arg2:ident $(,)?) => {
Some((Sysno::$name, [$arg0, $arg1, $arg2, None, None, None]))
};
($name:ident, $arg0:ident, $arg1:ident, $arg2:ident, $arg3:ident $(,)?) => {
Some((Sysno::$name, [$arg0, $arg1, $arg2, $arg3, None, None]))
};
($name:ident, $arg0:ident, $arg1:ident, $arg2:ident, $arg3:ident, $arg4:ident $(,)?) => {
Some((Sysno::$name, [$arg0, $arg1, $arg2, $arg3, $arg4, None]))
};
($name:ident, $arg0:ident, $arg1:ident, $arg2:ident, $arg3:ident, $arg4:ident, $arg5:ident $(,)?) => {
Some((Sysno::$name, [$arg0, $arg1, $arg2, $arg3, $arg4, $arg5]))
};
}
const ADDR: Option<SyscallArgType> = Some(SyscallArgType::Addr);
const INT: Option<SyscallArgType> = Some(SyscallArgType::Int);
const STR: Option<SyscallArgType> = Some(SyscallArgType::Str);
const STRV: Option<SyscallArgType> = Some(SyscallArgType::StrArray);
pub static SYSCALLS: [Option<(Sysno, [Option<SyscallArgType>; 6])>; 452] = [
syscall!(read, INT, STR, INT),
syscall!(write, INT, STR, INT),
syscall!(open, STR, INT, INT),
syscall!(close, INT),
syscall!(stat, STR, ADDR),
syscall!(fstat, INT, ADDR),
syscall!(lstat, STR, ADDR),
syscall!(poll, ADDR, INT, INT),
syscall!(lseek, INT, INT, INT),
syscall!(mmap, ADDR, INT, INT, INT, INT, INT),
syscall!(mprotect, ADDR, INT, INT),
syscall!(munmap, ADDR, INT),
syscall!(brk, ADDR),
syscall!(rt_sigaction, INT, ADDR, ADDR),
syscall!(rt_sigprocmask, INT, ADDR, ADDR, INT),
syscall!(rt_sigreturn),
syscall!(ioctl, INT, INT, ADDR),
syscall!(pread64, INT, STR, INT, INT),
syscall!(pwrite64, INT, STR, INT, INT),
syscall!(readv, INT, ADDR, INT),
syscall!(writev, INT, ADDR, INT),
syscall!(access, STR, INT),
syscall!(pipe, INT, INT),
syscall!(select, INT, ADDR, ADDR, ADDR, ADDR),
syscall!(sched_yield),
syscall!(mremap, ADDR, INT, INT, INT, ADDR),
syscall!(msync, ADDR, INT, INT),
syscall!(mincore, ADDR, INT, ADDR),
syscall!(madvise, ADDR, INT, INT),
syscall!(shmget, INT, INT, INT),
syscall!(shmat, INT, ADDR, INT),
syscall!(shmctl, INT, INT, STR),
syscall!(dup, INT),
syscall!(dup2, INT, INT),
syscall!(pause, ADDR),
syscall!(nanosleep, ADDR, ADDR),
syscall!(getitimer, INT, ADDR),
syscall!(alarm, INT),
syscall!(setitimer, INT, ADDR),
syscall!(getpid, ADDR),
syscall!(sendfile, INT, INT, ADDR, INT),
syscall!(socket, INT, INT, INT),
syscall!(connect, INT, ADDR, INT),
syscall!(accept, INT, ADDR, ADDR),
syscall!(sendto, INT, STR, INT, INT),
syscall!(recvfrom, INT, STR, INT, INT, ADDR, ADDR),
syscall!(sendmsg, INT, ADDR, INT),
syscall!(recvmsg, INT, ADDR, INT),
syscall!(shutdown, INT, INT),
syscall!(bind, INT, ADDR, INT),
syscall!(listen, INT, INT),
syscall!(getsockname, INT, ADDR, ADDR),
syscall!(getpeername, INT, ADDR, ADDR),
syscall!(socketpair, INT, INT, INT, INT),
syscall!(setsockopt, INT, INT, INT, ADDR, INT),
syscall!(getsockopt, INT, INT, INT, ADDR, ADDR),
syscall!(clone, ADDR, INT),
syscall!(fork, ADDR),
syscall!(vfork, ADDR),
syscall!(execve, STR, STRV, STRV),
syscall!(exit, INT),
syscall!(wait4, INT, INT, INT, ADDR),
syscall!(kill, INT, INT),
syscall!(uname, ADDR),
syscall!(semget, INT, INT, INT),
syscall!(semop, INT, ADDR, INT),
syscall!(semctl, INT, INT, INT),
syscall!(shmdt, INT, ADDR, INT),
syscall!(msgget, INT, INT),
syscall!(msgsnd, INT, ADDR, INT, INT),
syscall!(msgrcv, INT, ADDR, INT, INT, INT),
syscall!(msgctl, INT, INT, ADDR),
syscall!(fcntl, INT, INT),
syscall!(flock, INT, INT),
syscall!(fsync, INT),
syscall!(fdatasync, INT),
syscall!(truncate, STR, INT),
syscall!(ftruncate, INT, INT),
syscall!(getdents, INT, ADDR, INT),
syscall!(getcwd, STR, INT),
syscall!(chdir, STR),
syscall!(fchdir, INT),
syscall!(rename, STR, STR),
syscall!(mkdir, STR, INT),
syscall!(rmdir, STR),
syscall!(creat, STR, INT),
syscall!(link, STR, STR),
syscall!(unlink, STR),
syscall!(symlink, STR, STR),
syscall!(readlink, STR, STR, INT),
syscall!(chmod, STR, INT),
syscall!(fchmod, INT, INT),
syscall!(chown, STR, INT, INT),
syscall!(fchown, INT, INT, INT),
syscall!(lchown, STR, INT, INT),
syscall!(umask, INT),
syscall!(gettimeofday, ADDR, ADDR),
syscall!(getrlimit, INT, ADDR),
syscall!(getrusage, INT, ADDR),
syscall!(sysinfo, ADDR),
syscall!(times, ADDR),
syscall!(ptrace, ADDR, INT, ADDR, ADDR),
syscall!(getuid, ADDR),
syscall!(syslog, INT, STR, INT),
syscall!(getgid, ADDR),
syscall!(setuid, INT),
syscall!(setgid, INT),
syscall!(geteuid, ADDR),
syscall!(getegid, ADDR),
syscall!(setpgid, INT, INT, INT),
syscall!(getppid, ADDR),
syscall!(getpgrp, ADDR),
syscall!(setsid, ADDR),
syscall!(setreuid, INT, INT),
syscall!(setregid, INT, INT),
syscall!(getgroups, INT, INT),
syscall!(setgroups, INT, INT),
syscall!(setresuid, INT, INT, INT),
syscall!(getresuid, INT, INT, INT),
syscall!(setresgid, INT, INT, INT),
syscall!(getresgid, INT, INT, INT),
syscall!(getpgid, INT),
syscall!(setfsuid, INT),
syscall!(setfsgid, INT),
syscall!(getsid, INT),
syscall!(capget, ADDR, ADDR),
syscall!(capset, ADDR, ADDR),
syscall!(rt_sigpending, ADDR),
syscall!(rt_sigtimedwait, ADDR, ADDR, ADDR),
syscall!(rt_sigqueueinfo, INT, INT, ADDR),
syscall!(rt_sigsuspend, INT),
syscall!(sigaltstack, ADDR, ADDR),
syscall!(utime, STR, ADDR, INT),
syscall!(mknod, STR, INT, INT),
syscall!(uselib, ADDR),
syscall!(personality, INT),
syscall!(ustat, INT, ADDR),
syscall!(statfs, STR, ADDR),
syscall!(fstatfs, INT, ADDR),
syscall!(sysfs, INT, STR),
syscall!(getpriority, INT, INT),
syscall!(setpriority, INT, INT, INT),
syscall!(sched_setparam, INT, ADDR),
syscall!(sched_getparam, INT, ADDR),
syscall!(sched_setscheduler, INT, INT, ADDR),
syscall!(sched_getscheduler, INT),
syscall!(sched_get_priority_max, INT),
syscall!(sched_get_priority_min, INT),
syscall!(sched_rr_get_interval, INT, ADDR),
syscall!(mlock, ADDR, INT),
syscall!(munlock, ADDR, INT),
syscall!(mlockall, INT),
syscall!(munlockall, ADDR),
syscall!(vhangup, ADDR),
syscall!(modify_ldt, INT, ADDR, INT),
syscall!(pivot_root, STR, STR),
syscall!(_sysctl, ADDR),
syscall!(prctl, INT, INT, INT, INT, INT),
syscall!(arch_prctl, INT, ADDR),
syscall!(adjtimex, STR),
syscall!(setrlimit, INT, ADDR),
syscall!(chroot, STR),
syscall!(sync, INT),
syscall!(acct, STR),
syscall!(settimeofday, ADDR, ADDR),
syscall!(mount, STR, STR, STR, INT, ADDR),
syscall!(umount2, STR, INT),
syscall!(swapon, STR, INT),
syscall!(swapoff, STR),
syscall!(reboot, INT, INT, INT, ADDR),
syscall!(sethostname, STR, INT),
syscall!(setdomainname, STR, INT),
syscall!(iopl, INT),
syscall!(ioperm, INT, INT, INT),
syscall!(create_module, STR, INT),
syscall!(init_module, ADDR, INT, STR),
syscall!(delete_module, STR, INT),
syscall!(get_kernel_syms, ADDR),
syscall!(query_module, STR, INT, STR, INT, INT),
syscall!(quotactl, INT, STR, INT, ADDR),
syscall!(nfsservctl, INT, ADDR, ADDR),
syscall!(getpmsg),
syscall!(putpmsg),
syscall!(afs_syscall),
syscall!(tuxcall),
syscall!(security),
syscall!(gettid, ADDR),
syscall!(readahead, INT, INT, INT),
syscall!(setxattr, STR, STR, ADDR, INT, INT),
syscall!(lsetxattr, STR, STR, ADDR, INT, INT),
syscall!(fsetxattr, INT, STR, ADDR, INT, INT),
syscall!(getxattr, STR, STR, ADDR, INT),
syscall!(lgetxattr, STR, STR, ADDR, INT),
syscall!(fgetxattr, INT, STR, ADDR, INT),
syscall!(listxattr, STR, STR, INT),
syscall!(llistxattr, STR, STR, INT),
syscall!(flistxattr, INT, STR, INT),
syscall!(removexattr, STR, STR),
syscall!(lremovexattr, STR, STR),
syscall!(fremovexattr, INT, STR),
syscall!(tkill, INT, INT),
syscall!(time, INT),
syscall!(futex, ADDR, INT, INT, ADDR, INT, INT),
syscall!(sched_setaffinity, INT, INT, INT),
syscall!(sched_getaffinity, INT, INT, INT),
syscall!(set_thread_area, ADDR),
syscall!(io_setup, INT, ADDR),
syscall!(io_destroy, INT),
syscall!(io_getevents, INT, INT, INT, ADDR, INT),
syscall!(io_submit, INT, INT, ADDR),
syscall!(io_cancel, INT, ADDR, ADDR),
syscall!(get_thread_area, ADDR),
syscall!(lookup_dcookie, INT, STR, INT),
syscall!(epoll_create, INT),
syscall!(epoll_ctl_old, INT, INT, INT, ADDR),
syscall!(epoll_wait_old, INT, ADDR, INT, INT),
syscall!(remap_file_pages, ADDR, INT, INT, INT, INT),
syscall!(getdents64, INT, ADDR, INT),
syscall!(set_tid_address, ADDR),
syscall!(restart_syscall, ADDR),
syscall!(semtimedop, INT, ADDR, INT),
syscall!(fadvise64, INT, INT, INT, INT),
syscall!(timer_create, INT, ADDR, INT),
syscall!(timer_settime, INT, INT, ADDR, ADDR),
syscall!(timer_gettime, INT, ADDR),
syscall!(timer_getoverrun, INT),
syscall!(timer_delete, INT),
syscall!(clock_settime, INT, ADDR),
syscall!(clock_gettime, INT, ADDR),
syscall!(clock_getres, INT, ADDR),
syscall!(clock_nanosleep, INT, INT, ADDR, ADDR),
syscall!(exit_group, INT),
syscall!(epoll_wait, INT, ADDR, INT, INT),
syscall!(epoll_ctl, INT, INT, INT, ADDR),
syscall!(tgkill, INT, INT, INT),
syscall!(utimes, STR, ADDR),
syscall!(vserver),
syscall!(mbind, ADDR, INT, INT, INT, INT, INT),
syscall!(set_mempolicy, INT, INT, INT),
syscall!(get_mempolicy, INT, INT, INT, ADDR, INT),
syscall!(mq_open, STR, INT),
syscall!(mq_unlink, STR),
syscall!(mq_timedsend, INT, STR, INT, INT),
syscall!(mq_timedreceive, INT, ADDR, INT, INT, ADDR),
syscall!(mq_notify, INT, ADDR),
syscall!(mq_getsetattr, INT, ADDR, ADDR),
syscall!(kexec_load, INT, INT, ADDR, INT),
syscall!(waitid, INT, INT, INT, INT),
syscall!(add_key, STR, STR, ADDR, INT, INT),
syscall!(request_key, STR, STR, STR, INT),
syscall!(keyctl, INT),
syscall!(ioprio_set, INT, INT),
syscall!(ioprio_get, INT, INT),
syscall!(inotify_init, ADDR),
syscall!(inotify_add_watch, INT, STR, INT),
syscall!(inotify_rm_watch, INT, INT),
syscall!(migrate_pages, INT, INT, INT, INT),
syscall!(openat, INT, STR, INT),
syscall!(mkdirat, INT, STR, INT),
syscall!(mknodat, INT, STR, INT, INT),
syscall!(fchownat, INT, STR, INT, INT, INT),
syscall!(futimesat, INT, STR, ADDR),
syscall!(newfstatat, INT, STR, ADDR, INT),
syscall!(unlinkat, INT, STR, INT),
syscall!(renameat, INT, STR, INT, STR),
syscall!(linkat, INT, STR, INT, STR, INT),
syscall!(symlinkat, STR, INT, STR),
syscall!(readlinkat, INT, STR, STR, INT),
syscall!(fchmodat, INT, STR, INT, INT),
syscall!(faccessat, INT, STR, INT, INT),
syscall!(pselect6, INT, INT, INT, INT, ADDR, INT),
syscall!(ppoll, INT, INT, ADDR, INT),
syscall!(unshare, INT),
syscall!(set_robust_list, ADDR, INT),
syscall!(get_robust_list, INT, ADDR, INT),
syscall!(splice, INT, INT, INT, INT, INT, INT),
syscall!(tee, INT, INT, INT, INT),
syscall!(sync_file_range, INT, INT, INT, INT),
syscall!(vmsplice, INT, ADDR, INT, INT),
syscall!(move_pages, INT, INT, ADDR, INT, INT, INT),
syscall!(utimensat, INT, STR, ADDR, INT),
syscall!(epoll_pwait, INT, ADDR, INT, INT, INT),
syscall!(signalfd, INT, INT, INT),
syscall!(timerfd_create, INT, INT),
syscall!(eventfd, INT, INT),
syscall!(fallocate, INT, INT, INT, INT),
syscall!(timerfd_settime, INT, INT, ADDR),
syscall!(timerfd_gettime, INT, ADDR),
syscall!(accept4, INT, ADDR, INT),
syscall!(signalfd4, INT, INT, INT),
syscall!(eventfd2, INT, INT),
syscall!(epoll_create1, INT),
syscall!(dup3, INT, INT, INT),
syscall!(pipe2, INT, INT),
syscall!(inotify_init1, INT),
syscall!(preadv, INT, ADDR, INT, INT),
syscall!(pwritev, INT, ADDR, INT, INT),
syscall!(rt_tgsigqueueinfo, INT, INT, INT),
syscall!(perf_event_open, ADDR, INT, INT, INT, INT),
syscall!(recvmmsg, INT, ADDR, INT, INT, ADDR),
syscall!(fanotify_init, INT, INT),
syscall!(fanotify_mark, INT, INT, INT, INT, STR),
syscall!(prlimit64, INT, INT, ADDR, ADDR),
syscall!(name_to_handle_at, INT, STR, ADDR, INT, INT),
syscall!(open_by_handle_at, INT, ADDR, INT),
syscall!(clock_adjtime, ADDR),
syscall!(syncfs, INT),
syscall!(sendmmsg, INT, ADDR, INT, INT),
syscall!(setns, INT, INT),
syscall!(getcpu, INT, INT, ADDR),
syscall!(process_vm_readv, INT, ADDR, INT, ADDR, INT, INT),
syscall!(process_vm_writev, INT, ADDR, INT, ADDR, INT, INT),
syscall!(kcmp, INT, INT, INT, INT, INT),
syscall!(finit_module, INT, STR, INT),
syscall!(sched_setattr, INT, ADDR, INT),
syscall!(sched_getattr, INT, ADDR, INT, INT),
syscall!(renameat2, INT, STR, INT, STR),
syscall!(seccomp, INT, INT, ADDR),
syscall!(getrandom, STR, INT, INT),
syscall!(memfd_create, STR, INT),
syscall!(kexec_file_load, INT, INT, ADDR, INT),
syscall!(bpf, INT, ADDR, INT),
syscall!(execveat, INT, STR, STRV, STRV, INT),
syscall!(userfaultfd, INT),
syscall!(membarrier, INT, INT, INT),
syscall!(mlock2, ADDR, INT, INT),
syscall!(copy_file_range, INT, INT, INT, INT, INT, INT),
syscall!(preadv2, INT, ADDR, INT, INT, INT),
syscall!(pwritev2, INT, ADDR, INT, INT, INT),
syscall!(pkey_mprotect, ADDR, INT, INT, INT),
syscall!(pkey_alloc, INT, INT),
syscall!(pkey_free, INT),
syscall!(statx, INT, STR, INT, INT, STR),
syscall!(io_pgetevents),
syscall!(rseq),
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
None,
syscall!(pidfd_send_signal, INT, INT, ADDR, INT),
syscall!(io_uring_setup, INT, ADDR),
syscall!(io_uring_enter, INT, INT, INT, INT, ADDR, INT),
syscall!(io_uring_register, INT, INT, ADDR, INT),
syscall!(open_tree, INT, STR, INT),
syscall!(move_mount, INT, STR, INT, STR, INT),
syscall!(fsopen, STR, INT),
syscall!(fsconfig, INT, INT, STR, ADDR, INT),
syscall!(fsmount, INT, INT, INT),
syscall!(fspick, INT, STR, INT),
syscall!(pidfd_open, INT, INT),
syscall!(clone3, ADDR, INT),
syscall!(close_range, INT, INT, INT),
syscall!(openat2, INT, STR, ADDR, INT),
syscall!(pidfd_getfd, INT, INT, INT),
syscall!(faccessat2, INT, STR, INT, INT),
syscall!(process_madvise, INT, ADDR, INT, INT, INT),
syscall!(epoll_pwait2, INT, ADDR, INT, ADDR, ADDR, INT),
syscall!(mount_setattr, INT, STR, INT, ADDR, INT),
syscall!(quotactl_fd, INT, INT, INT, ADDR),
syscall!(landlock_create_ruleset, ADDR, INT, INT),
syscall!(landlock_add_rule, INT, INT, ADDR, INT),
syscall!(landlock_restrict_self, INT, INT),
syscall!(memfd_secret, INT),
syscall!(process_mrelease, INT, INT),
syscall!(futex_waitv, ADDR, INT, INT, ADDR, INT),
syscall!(set_mempolicy_home_node, INT, INT, INT, INT),
syscall!(cachestat, INT, INT, INT, INT),
];
pub fn get_arg_value(registers: user_regs_struct, i: usize) -> c_ulonglong {
match i {
0 => registers.rdi,
1 => registers.rsi,
2 => registers.rdx,
3 => registers.r10,
4 => registers.r8,
5 => registers.r9,
v => panic!("Invalid system call index {v}!"),
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
#[allow(clippy::cast_sign_loss)]
fn test_syscall_numbers() {
for (i, sysno, ..) in SYSCALLS.iter().enumerate() {
if let Some((sysno, _)) = sysno {
assert_eq!(i, sysno.id() as usize);
}
}
}
}