From 856d7e467fb31d5766f86efb25765c0f27016669 Mon Sep 17 00:00:00 2001 From: Michael Mikovsky <77305074+Astatin3@users.noreply.github.com> Date: Tue, 12 Aug 2025 22:24:00 -0600 Subject: [PATCH] Kinda get network working --- Cargo.toml | 4 +- client/Cargo.toml | 8 + client/src/main.rs | 85 + client/src/syscall_exec.rs | 658 ++++++ src/host.rs | 52 + src/lib.rs | 83 +- src/syscall_exec.rs | 688 +++++++ src/syscall_intercept.rs | 16 +- src/syscalls.rs | 3167 ----------------------------- syscall_lib/Cargo.toml | 7 + syscall_lib/src/create_syscall.rs | 402 ++++ syscall_lib/src/lib.rs | 41 + syscall_lib/src/proxy_list.rs | 540 +++++ syscall_lib/src/syscall.rs | 404 ++++ syscall_lib/src/syscall_num.rs | 380 ++++ 15 files changed, 3316 insertions(+), 3219 deletions(-) create mode 100644 client/Cargo.toml create mode 100644 client/src/main.rs create mode 100644 client/src/syscall_exec.rs create mode 100644 src/host.rs create mode 100644 src/syscall_exec.rs delete mode 100644 src/syscalls.rs create mode 100644 syscall_lib/Cargo.toml create mode 100644 syscall_lib/src/create_syscall.rs create mode 100644 syscall_lib/src/lib.rs create mode 100644 syscall_lib/src/proxy_list.rs create mode 100644 syscall_lib/src/syscall.rs create mode 100644 syscall_lib/src/syscall_num.rs diff --git a/Cargo.toml b/Cargo.toml index 5fc5358..29bd05b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,9 +4,11 @@ version = "0.1.0" edition = "2024" [dependencies] -bincode = "2.0.1" ctor = "0.5.0" libc = "0.2.175" +# syscalls = "0.6.18" +syscall_lib = { path = "syscall_lib" } +syscaller = "0.2.2" [build-dependencies] cmake = "0.1" diff --git a/client/Cargo.toml b/client/Cargo.toml new file mode 100644 index 0000000..0b3cb3e --- /dev/null +++ b/client/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "client" +version = "0.1.0" +edition = "2024" + +[dependencies] +syscall_lib = { path = "../syscall_lib" } +syscaller = "0.2.2" diff --git a/client/src/main.rs b/client/src/main.rs new file mode 100644 index 0000000..5d424f7 --- /dev/null +++ b/client/src/main.rs @@ -0,0 +1,85 @@ +mod syscall_exec; + +use std::{ + io::{Read, Write}, + net::{TcpListener, TcpStream}, + thread, +}; + +use syscall_lib::{Message, ProgramMemory, Syscall}; + +fn main() { + let listener = TcpListener::bind("127.0.0.1:1234").unwrap(); + + for stream in listener.incoming() { + let mut stream = stream.unwrap(); + + thread::spawn(move || { + let _ = handle_connection(&mut stream); + println!("Connection from {} closed", stream.peer_addr().unwrap()); + }); + } +} + +fn handle_connection(stream: &mut TcpStream) -> Result<(), std::io::Error> { + println!("Got connection from {}", stream.peer_addr()?); + + // let mut memory = ProgramMemory::default(); + + loop { + let mut size_buf = [0u8; 4]; + stream.read_exact(&mut size_buf)?; + let size = u32::from_be_bytes(size_buf); + + let mut buf = vec![0u8; size as usize]; + + stream.read_exact(&mut buf)?; + + let decoded = Syscall::decode(&buf).unwrap(); + + println!("{:?} -> ", decoded); + + // let result = match decoded { + // Syscall::Write(..) => 0, + // _ => syscall_exec::execute_syscall(decoded), + // }; + let result = syscall_exec::execute_syscall(decoded); + + println!("{:?}", result); + + let bytes: [u8; 8] = result.to_be_bytes(); + stream.write_all(&bytes)?; + stream.flush()?; + + // let response = bincode::serialize(&result).unwrap(); + // stream.write_all(&response).unwrap(); + + // match decoded { + // Message::RequestMemory(addr) => { + // let mem_map = memory.lock().unwrap(); + // let data = mem_map.get(&addr); + // let response = bincode::serialize(&data).unwrap(); + // stream.write_all(&response).unwrap(); + // } + // Message::UpdateMemory(addr, data) => { + // let mut mem_map = memory.lock().unwrap(); + // mem_map.insert(addr, data); + // println!("Memory at {} updated.", addr); + // } + // Message::Syscall(_, _) => { + // // The host doesn't execute the syscall. + // // It just waits for the result. + // } + // Message::SyscallReturn(ret, new_mem) => { + // println!("Syscall returned with value: {}", ret); + // if let Some((addr, data)) = new_mem { + // let mut mem_map = memory.lock().unwrap(); + // mem_map.insert(addr, data); + // println!("New memory object created at {}.", addr); + // } + // } + // } + + // println!("{:?}", decoded); + } +} diff --git a/client/src/syscall_exec.rs b/client/src/syscall_exec.rs new file mode 100644 index 0000000..0f3b8b9 --- /dev/null +++ b/client/src/syscall_exec.rs @@ -0,0 +1,658 @@ +use syscall_lib::Syscall; +use syscaller::{syscall0, syscall1, syscall2, syscall3, syscall4, syscall5, syscall6}; + +// fn syscall0(number: isize) -> isize { +// unsafe { syscaller::syscall0(number as usize) } +// } + +// fn syscall1(number: isize, arg0: isize) -> isize { +// unsafe { syscaller::syscall1(number as usize, arg0 as usize) } +// } + +// fn syscall2(number: isize, arg0: isize, arg1: isize) -> isize { +// unsafe { syscaller::syscall2(number as usize, arg0 as usize, arg1 as usize) } +// } + +// fn syscall3(number: isize, arg0: isize, arg1: isize, arg2: isize) -> isize { +// unsafe { syscaller::syscall3(number as usize, arg0 as usize, arg1 as usize, arg2 as usize) } +// } + +// fn syscall4(number: isize, arg0: isize, arg1: isize, arg2: isize, arg3: isize) -> isize { +// unsafe { +// syscaller::syscall4( +// number as usize, +// arg0 as usize, +// arg1 as usize, +// arg2 as usize, +// arg3 as usize, +// ) +// } +// } + +// fn syscall5( +// number: isize, +// arg0: isize, +// arg1: isize, +// arg2: isize, +// arg3: isize, +// arg4: isize, +// ) -> isize { +// unsafe { +// syscaller::syscall5( +// number as usize, +// arg0 as usize, +// arg1 as usize, +// arg2 as usize, +// arg3 as usize, +// arg4 as usize, +// ) +// } +// } + +// fn syscall6( +// number: isize, +// arg0: isize, +// arg1: isize, +// arg2: isize, +// arg3: isize, +// arg4: isize, +// arg5: isize, +// ) -> isize { +// unsafe { +// syscaller::syscall6( +// number as usize, +// arg0 as usize, +// arg1 as usize, +// arg2 as usize, +// arg3 as usize, +// arg4 as usize, +// arg5 as usize, +// ) +// } +// } + +// The Syscall enum and type aliases from the previous response are assumed to be present here. +#[allow(unused_unsafe)] +pub fn execute_syscall(syscall_obj: Syscall) -> isize { + match syscall_obj { + Syscall::Read(arg0, arg1, arg2) => unsafe { syscall3(0, arg0, arg1, arg2) }, + Syscall::Write(arg0, arg1, arg2) => unsafe { syscall3(1, arg0, arg1, arg2) }, + Syscall::Open(arg0, arg1, arg2) => unsafe { syscall3(2, arg0, arg1, arg2) }, + Syscall::Close(arg0) => unsafe { syscall1(3, arg0) }, + Syscall::Stat(arg0, arg1) => unsafe { syscall2(4, arg0, arg1) }, + Syscall::Fstat(arg0, arg1) => unsafe { syscall2(5, arg0, arg1) }, + Syscall::Lstat(arg0, arg1) => unsafe { syscall2(6, arg0, arg1) }, + Syscall::Poll(arg0, arg1, arg2) => unsafe { syscall3(7, arg0, arg1, arg2) }, + Syscall::Lseek(arg0, arg1, arg2) => unsafe { syscall3(8, arg0, arg1, arg2) }, + Syscall::Mmap(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(9, arg0, arg1, arg2, arg3, arg4, arg5) + }, + Syscall::Mprotect(arg0, arg1, arg2) => unsafe { syscall3(10, arg0, arg1, arg2) }, + Syscall::Munmap(arg0, arg1) => unsafe { syscall2(11, arg0, arg1) }, + Syscall::Brk(arg0) => unsafe { syscall1(12, arg0) }, + Syscall::RtSigaction(arg0, arg1, arg2, arg3) => unsafe { + syscall4(13, arg0, arg1, arg2, arg3) + }, + Syscall::RtSigprocmask(arg0, arg1, arg2, arg3) => unsafe { + syscall4(14, arg0, arg1, arg2, arg3) + }, + Syscall::RtSigreturn => unsafe { syscall0(15) }, + Syscall::Ioctl(arg0, arg1, arg2) => unsafe { syscall3(16, arg0, arg1, arg2) }, + Syscall::Pread64(arg0, arg1, arg2, arg3) => unsafe { syscall4(17, arg0, arg1, arg2, arg3) }, + Syscall::Pwrite64(arg0, arg1, arg2, arg3) => unsafe { + syscall4(18, arg0, arg1, arg2, arg3) + }, + Syscall::Readv(arg0, arg1, arg2) => unsafe { syscall3(19, arg0, arg1, arg2) }, + Syscall::Writev(arg0, arg1, arg2) => unsafe { syscall3(20, arg0, arg1, arg2) }, + Syscall::Access(arg0, arg1) => unsafe { syscall2(21, arg0, arg1) }, + Syscall::Pipe(arg0) => unsafe { syscall1(22, arg0) }, + Syscall::Select(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(23, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::SchedYield => unsafe { syscall0(24) }, + Syscall::Mremap(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(25, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Msync(arg0, arg1, arg2) => unsafe { syscall3(26, arg0, arg1, arg2) }, + Syscall::Mincore(arg0, arg1, arg2) => unsafe { syscall3(27, arg0, arg1, arg2) }, + Syscall::Madvise(arg0, arg1, arg2) => unsafe { syscall3(28, arg0, arg1, arg2) }, + Syscall::Shmget(arg0, arg1, arg2) => unsafe { syscall3(29, arg0, arg1, arg2) }, + Syscall::Shmat(arg0, arg1, arg2) => unsafe { syscall3(30, arg0, arg1, arg2) }, + Syscall::Shmctl(arg0, arg1, arg2) => unsafe { syscall3(31, arg0, arg1, arg2) }, + Syscall::Dup(arg0) => unsafe { syscall1(32, arg0) }, + Syscall::Dup2(arg0, arg1) => unsafe { syscall2(33, arg0, arg1) }, + Syscall::Pause => unsafe { syscall0(34) }, + Syscall::Nanosleep(arg0, arg1) => unsafe { syscall2(35, arg0, arg1) }, + Syscall::Getitimer(arg0, arg1) => unsafe { syscall2(36, arg0, arg1) }, + Syscall::Alarm(arg0) => unsafe { syscall1(37, arg0) }, + Syscall::Setitimer(arg0, arg1, arg2) => unsafe { syscall3(38, arg0, arg1, arg2) }, + Syscall::Getpid => unsafe { syscall0(39) }, + Syscall::Sendfile(arg0, arg1, arg2, arg3) => unsafe { + syscall4(40, arg0, arg1, arg2, arg3) + }, + Syscall::Socket(arg0, arg1, arg2) => unsafe { syscall3(41, arg0, arg1, arg2) }, + Syscall::Connect(arg0, arg1, arg2) => unsafe { syscall3(42, arg0, arg1, arg2) }, + Syscall::Accept(arg0, arg1, arg2) => unsafe { syscall3(43, arg0, arg1, arg2) }, + Syscall::Sendto(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(44, arg0, arg1, arg2, arg3, arg4, arg5) + }, + Syscall::Recvfrom(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(45, arg0, arg1, arg2, arg3, arg4, arg5) + }, + Syscall::Sendmsg(arg0, arg1, arg2) => unsafe { syscall3(46, arg0, arg1, arg2) }, + Syscall::Recvmsg(arg0, arg1, arg2) => unsafe { syscall3(47, arg0, arg1, arg2) }, + Syscall::Shutdown(arg0, arg1) => unsafe { syscall2(48, arg0, arg1) }, + Syscall::Bind(arg0, arg1, arg2) => unsafe { syscall3(49, arg0, arg1, arg2) }, + Syscall::Listen(arg0, arg1) => unsafe { syscall2(50, arg0, arg1) }, + Syscall::Getsockname(arg0, arg1, arg2) => unsafe { syscall3(51, arg0, arg1, arg2) }, + Syscall::Getpeername(arg0, arg1, arg2) => unsafe { syscall3(52, arg0, arg1, arg2) }, + Syscall::Socketpair(arg0, arg1, arg2, arg3) => unsafe { + syscall4(53, arg0, arg1, arg2, arg3) + }, + Syscall::Setsockopt(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(54, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Getsockopt(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(55, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Clone(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(56, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Fork => unsafe { syscall0(57) }, + Syscall::Vfork => unsafe { syscall0(58) }, + Syscall::Execve(arg0, arg1, arg2) => unsafe { syscall3(59, arg0, arg1, arg2) }, + Syscall::Exit(arg0) => unsafe { syscall1(60, arg0) }, + Syscall::Wait4(arg0, arg1, arg2, arg3) => unsafe { syscall4(61, arg0, arg1, arg2, arg3) }, + Syscall::Kill(arg0, arg1) => unsafe { syscall2(62, arg0, arg1) }, + Syscall::Uname(arg0) => unsafe { syscall1(63, arg0) }, + Syscall::Semget(arg0, arg1, arg2) => unsafe { syscall3(64, arg0, arg1, arg2) }, + Syscall::Semop(arg0, arg1, arg2) => unsafe { syscall3(65, arg0, arg1, arg2) }, + Syscall::Semctl(arg0, arg1, arg2, arg3) => unsafe { syscall4(66, arg0, arg1, arg2, arg3) }, + Syscall::Shmdt(arg0) => unsafe { syscall1(67, arg0) }, + Syscall::Msgget(arg0, arg1) => unsafe { syscall2(68, arg0, arg1) }, + Syscall::Msgsnd(arg0, arg1, arg2, arg3) => unsafe { syscall4(69, arg0, arg1, arg2, arg3) }, + Syscall::Msgrcv(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(70, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Msgctl(arg0, arg1, arg2) => unsafe { syscall3(71, arg0, arg1, arg2) }, + Syscall::Fcntl(arg0, arg1, arg2) => unsafe { syscall3(72, arg0, arg1, arg2) }, + Syscall::Flock(arg0, arg1) => unsafe { syscall2(73, arg0, arg1) }, + Syscall::Fsync(arg0) => unsafe { syscall1(74, arg0) }, + Syscall::Fdatasync(arg0) => unsafe { syscall1(75, arg0) }, + Syscall::Truncate(arg0, arg1) => unsafe { syscall2(76, arg0, arg1) }, + Syscall::Ftruncate(arg0, arg1) => unsafe { syscall2(77, arg0, arg1) }, + Syscall::Getdents(arg0, arg1, arg2) => unsafe { syscall3(78, arg0, arg1, arg2) }, + Syscall::Getcwd(arg0, arg1) => unsafe { syscall2(79, arg0, arg1) }, + Syscall::Chdir(arg0) => unsafe { syscall1(80, arg0) }, + Syscall::Fchdir(arg0) => unsafe { syscall1(81, arg0) }, + Syscall::Rename(arg0, arg1) => unsafe { syscall2(82, arg0, arg1) }, + Syscall::Mkdir(arg0, arg1) => unsafe { syscall2(83, arg0, arg1) }, + Syscall::Rmdir(arg0) => unsafe { syscall1(84, arg0) }, + Syscall::Creat(arg0, arg1) => unsafe { syscall2(85, arg0, arg1) }, + Syscall::Link(arg0, arg1) => unsafe { syscall2(86, arg0, arg1) }, + Syscall::Unlink(arg0) => unsafe { syscall1(87, arg0) }, + Syscall::Symlink(arg0, arg1) => unsafe { syscall2(88, arg0, arg1) }, + Syscall::Readlink(arg0, arg1, arg2) => unsafe { syscall3(89, arg0, arg1, arg2) }, + Syscall::Chmod(arg0, arg1) => unsafe { syscall2(90, arg0, arg1) }, + Syscall::Fchmod(arg0, arg1) => unsafe { syscall2(91, arg0, arg1) }, + Syscall::Chown(arg0, arg1, arg2) => unsafe { syscall3(92, arg0, arg1, arg2) }, + Syscall::Fchown(arg0, arg1, arg2) => unsafe { syscall3(93, arg0, arg1, arg2) }, + Syscall::Lchown(arg0, arg1, arg2) => unsafe { syscall3(94, arg0, arg1, arg2) }, + Syscall::Umask(arg0) => unsafe { syscall1(95, arg0) }, + Syscall::Gettimeofday(arg0, arg1) => unsafe { syscall2(96, arg0, arg1) }, + Syscall::Getrlimit(arg0, arg1) => unsafe { syscall2(97, arg0, arg1) }, + Syscall::Getrusage(arg0, arg1) => unsafe { syscall2(98, arg0, arg1) }, + Syscall::Sysinfo(arg0) => unsafe { syscall1(99, arg0) }, + Syscall::Times(arg0) => unsafe { syscall1(100, arg0) }, + Syscall::Ptrace(arg0, arg1, arg2, arg3) => unsafe { syscall4(101, arg0, arg1, arg2, arg3) }, + Syscall::Getuid => unsafe { syscall0(102) }, + Syscall::Syslog(arg0, arg1, arg2) => unsafe { syscall3(103, arg0, arg1, arg2) }, + Syscall::Getgid => unsafe { syscall0(104) }, + Syscall::Setuid(arg0) => unsafe { syscall1(105, arg0) }, + Syscall::Setgid(arg0) => unsafe { syscall1(106, arg0) }, + Syscall::Geteuid => unsafe { syscall0(107) }, + Syscall::Getegid => unsafe { syscall0(108) }, + Syscall::Setpgid(arg0, arg1) => unsafe { syscall2(109, arg0, arg1) }, + Syscall::Getppid => unsafe { syscall0(110) }, + Syscall::Getpgrp => unsafe { syscall0(111) }, + Syscall::Setsid => unsafe { syscall0(112) }, + Syscall::Setreuid(arg0, arg1) => unsafe { syscall2(113, arg0, arg1) }, + Syscall::Setregid(arg0, arg1) => unsafe { syscall2(114, arg0, arg1) }, + Syscall::Getgroups(arg0, arg1) => unsafe { syscall2(115, arg0, arg1) }, + Syscall::Setgroups(arg0, arg1) => unsafe { syscall2(116, arg0, arg1) }, + Syscall::Setresuid(arg0, arg1, arg2) => unsafe { syscall3(117, arg0, arg1, arg2) }, + Syscall::Getresuid(arg0, arg1, arg2) => unsafe { syscall3(118, arg0, arg1, arg2) }, + Syscall::Setresgid(arg0, arg1, arg2) => unsafe { syscall3(119, arg0, arg1, arg2) }, + Syscall::Getresgid(arg0, arg1, arg2) => unsafe { syscall3(120, arg0, arg1, arg2) }, + Syscall::Getpgid(arg0) => unsafe { syscall1(121, arg0) }, + Syscall::Setfsuid(arg0) => unsafe { syscall1(122, arg0) }, + Syscall::Setfsgid(arg0) => unsafe { syscall1(123, arg0) }, + Syscall::Getsid(arg0) => unsafe { syscall1(124, arg0) }, + Syscall::Capget(arg0, arg1) => unsafe { syscall2(125, arg0, arg1) }, + Syscall::Capset(arg0, arg1) => unsafe { syscall2(126, arg0, arg1) }, + Syscall::RtSigpending(arg0, arg1) => unsafe { syscall2(127, arg0, arg1) }, + Syscall::RtSigtimedwait(arg0, arg1, arg2, arg3) => unsafe { + syscall4(128, arg0, arg1, arg2, arg3) + }, + Syscall::RtSigqueueinfo(arg0, arg1, arg2) => unsafe { syscall3(129, arg0, arg1, arg2) }, + Syscall::RtSigsuspend(arg0, arg1) => unsafe { syscall2(130, arg0, arg1) }, + Syscall::Sigaltstack(arg0, arg1) => unsafe { syscall2(131, arg0, arg1) }, + Syscall::Utime(arg0, arg1) => unsafe { syscall2(132, arg0, arg1) }, + Syscall::Mknod(arg0, arg1, arg2) => unsafe { syscall3(133, arg0, arg1, arg2) }, + Syscall::Uselib(arg0) => unsafe { syscall1(134, arg0) }, + Syscall::Personality(arg0) => unsafe { syscall1(135, arg0) }, + Syscall::Ustat(arg0, arg1) => unsafe { syscall2(136, arg0, arg1) }, + Syscall::Statfs(arg0, arg1) => unsafe { syscall2(137, arg0, arg1) }, + Syscall::Fstatfs(arg0, arg1) => unsafe { syscall2(138, arg0, arg1) }, + Syscall::Sysfs(arg0, arg1, arg2) => unsafe { syscall3(139, arg0, arg1, arg2) }, + Syscall::Getpriority(arg0, arg1) => unsafe { syscall2(140, arg0, arg1) }, + Syscall::Setpriority(arg0, arg1, arg2) => unsafe { syscall3(141, arg0, arg1, arg2) }, + Syscall::SchedSetparam(arg0, arg1) => unsafe { syscall2(142, arg0, arg1) }, + Syscall::SchedGetparam(arg0, arg1) => unsafe { syscall2(143, arg0, arg1) }, + Syscall::SchedSetscheduler(arg0, arg1, arg2) => unsafe { syscall3(144, arg0, arg1, arg2) }, + Syscall::SchedGetscheduler(arg0) => unsafe { syscall1(145, arg0) }, + Syscall::SchedGetPriorityMax(arg0) => unsafe { syscall1(146, arg0) }, + Syscall::SchedGetPriorityMin(arg0) => unsafe { syscall1(147, arg0) }, + Syscall::SchedRrGetInterval(arg0, arg1) => unsafe { syscall2(148, arg0, arg1) }, + Syscall::Mlock(arg0, arg1) => unsafe { syscall2(149, arg0, arg1) }, + Syscall::Munlock(arg0, arg1) => unsafe { syscall2(150, arg0, arg1) }, + Syscall::Mlockall(arg0) => unsafe { syscall1(151, arg0) }, + Syscall::Munlockall => unsafe { syscall0(152) }, + Syscall::Vhangup => unsafe { syscall0(153) }, + Syscall::ModifyLdt(arg0, arg1, arg2) => unsafe { syscall3(154, arg0, arg1, arg2) }, + Syscall::PivotRoot(arg0, arg1) => unsafe { syscall2(155, arg0, arg1) }, + Syscall::_Sysctl(arg0) => unsafe { syscall1(156, arg0) }, + Syscall::Prctl(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(157, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::ArchPrctl(arg0, arg1) => unsafe { syscall2(158, arg0, arg1) }, + Syscall::Adjtimex(arg0) => unsafe { syscall1(159, arg0) }, + Syscall::Setrlimit(arg0, arg1) => unsafe { syscall2(160, arg0, arg1) }, + Syscall::Chroot(arg0) => unsafe { syscall1(161, arg0) }, + Syscall::Sync => unsafe { syscall0(162) }, + Syscall::Acct(arg0) => unsafe { syscall1(163, arg0) }, + Syscall::Settimeofday(arg0, arg1) => unsafe { syscall2(164, arg0, arg1) }, + Syscall::Mount(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(165, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Umount2(arg0, arg1) => unsafe { syscall2(166, arg0, arg1) }, + Syscall::Swapon(arg0, arg1) => unsafe { syscall2(167, arg0, arg1) }, + Syscall::Swapoff(arg0) => unsafe { syscall1(168, arg0) }, + Syscall::Reboot(arg0, arg1, arg2, arg3) => unsafe { syscall4(169, arg0, arg1, arg2, arg3) }, + Syscall::Sethostname(arg0, arg1) => unsafe { syscall2(170, arg0, arg1) }, + Syscall::Setdomainname(arg0, arg1) => unsafe { syscall2(171, arg0, arg1) }, + Syscall::Iopl(arg0) => unsafe { syscall1(172, arg0) }, + Syscall::Ioperm(arg0, arg1, arg2) => unsafe { syscall3(173, arg0, arg1, arg2) }, + Syscall::CreateModule(arg0, arg1) => unsafe { syscall2(174, arg0, arg1) }, + Syscall::InitModule(arg0, arg1, arg2) => unsafe { syscall3(175, arg0, arg1, arg2) }, + Syscall::DeleteModule(arg0, arg1) => unsafe { syscall2(176, arg0, arg1) }, + Syscall::GetKernelSyms(arg0) => unsafe { syscall1(177, arg0) }, + Syscall::QueryModule(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(178, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Quotactl(arg0, arg1, arg2, arg3) => unsafe { + syscall4(179, arg0, arg1, arg2, arg3) + }, + Syscall::Nfsservctl(arg0, arg1, arg2) => unsafe { syscall3(180, arg0, arg1, arg2) }, + Syscall::Getpmsg => unsafe { syscall0(181) }, + Syscall::Putpmsg => unsafe { syscall0(182) }, + Syscall::AfsSyscall => unsafe { syscall0(183) }, + Syscall::Tuxcall => unsafe { syscall0(184) }, + Syscall::Security => unsafe { syscall0(185) }, + Syscall::Gettid => unsafe { syscall0(186) }, + Syscall::Readahead(arg0, arg1, arg2) => unsafe { syscall3(187, arg0, arg1, arg2) }, + Syscall::Setxattr(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(188, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Lsetxattr(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(189, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Fsetxattr(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(190, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Getxattr(arg0, arg1, arg2, arg3) => unsafe { + syscall4(191, arg0, arg1, arg2, arg3) + }, + Syscall::Lgetxattr(arg0, arg1, arg2, arg3) => unsafe { + syscall4(192, arg0, arg1, arg2, arg3) + }, + Syscall::Fgetxattr(arg0, arg1, arg2, arg3) => unsafe { + syscall4(193, arg0, arg1, arg2, arg3) + }, + Syscall::Listxattr(arg0, arg1, arg2) => unsafe { syscall3(194, arg0, arg1, arg2) }, + Syscall::Llistxattr(arg0, arg1, arg2) => unsafe { syscall3(195, arg0, arg1, arg2) }, + Syscall::Flistxattr(arg0, arg1, arg2) => unsafe { syscall3(196, arg0, arg1, arg2) }, + Syscall::Removexattr(arg0, arg1) => unsafe { syscall2(197, arg0, arg1) }, + Syscall::Lremovexattr(arg0, arg1) => unsafe { syscall2(198, arg0, arg1) }, + Syscall::Fremovexattr(arg0, arg1) => unsafe { syscall2(199, arg0, arg1) }, + Syscall::Tkill(arg0, arg1) => unsafe { syscall2(200, arg0, arg1) }, + Syscall::Time(arg0) => unsafe { syscall1(201, arg0) }, + Syscall::Futex(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(202, arg0, arg1, arg2, arg3, arg4, arg5) + }, + Syscall::SchedSetaffinity(arg0, arg1, arg2) => unsafe { syscall3(203, arg0, arg1, arg2) }, + Syscall::SchedGetaffinity(arg0, arg1, arg2) => unsafe { syscall3(204, arg0, arg1, arg2) }, + Syscall::SetThreadArea(arg0) => unsafe { syscall1(205, arg0) }, + Syscall::IoSetup(arg0, arg1) => unsafe { syscall2(206, arg0, arg1) }, + Syscall::IoDestroy(arg0) => unsafe { syscall1(207, arg0) }, + Syscall::IoGetevents(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(208, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::IoSubmit(arg0, arg1, arg2) => unsafe { syscall3(209, arg0, arg1, arg2) }, + Syscall::IoCancel(arg0, arg1, arg2) => unsafe { syscall3(210, arg0, arg1, arg2) }, + Syscall::GetThreadArea(arg0) => unsafe { syscall1(211, arg0) }, + Syscall::LookupDcookie(arg0, arg1, arg2, arg3) => unsafe { + syscall4(212, arg0, arg1, arg2, arg3) + }, + Syscall::EpollCreate(arg0) => unsafe { syscall1(213, arg0) }, + Syscall::EpollCtlOld => unsafe { syscall0(214) }, + Syscall::EpollWaitOld => unsafe { syscall0(215) }, + Syscall::RemapFilePages(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(216, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Getdents64(arg0, arg1, arg2) => unsafe { syscall3(217, arg0, arg1, arg2) }, + Syscall::SetTidAddress(arg0) => unsafe { syscall1(218, arg0) }, + Syscall::RestartSyscall => unsafe { syscall0(219) }, + Syscall::Semtimedop(arg0, arg1, arg2, arg3) => unsafe { + syscall4(220, arg0, arg1, arg2, arg3) + }, + Syscall::Fadvise64(arg0, arg1, arg2, arg3) => unsafe { + syscall4(221, arg0, arg1, arg2, arg3) + }, + Syscall::TimerCreate(arg0, arg1, arg2) => unsafe { syscall3(222, arg0, arg1, arg2) }, + Syscall::TimerSettime(arg0, arg1, arg2, arg3) => unsafe { + syscall4(223, arg0, arg1, arg2, arg3) + }, + Syscall::TimerGettime(arg0, arg1) => unsafe { syscall2(224, arg0, arg1) }, + Syscall::TimerGetoverrun(arg0) => unsafe { syscall1(225, arg0) }, + Syscall::TimerDelete(arg0) => unsafe { syscall1(226, arg0) }, + Syscall::ClockSettime(arg0, arg1) => unsafe { syscall2(227, arg0, arg1) }, + Syscall::ClockGettime(arg0, arg1) => unsafe { syscall2(228, arg0, arg1) }, + Syscall::ClockGetres(arg0, arg1) => unsafe { syscall2(229, arg0, arg1) }, + Syscall::ClockNanosleep(arg0, arg1, arg2, arg3) => unsafe { + syscall4(230, arg0, arg1, arg2, arg3) + }, + Syscall::ExitGroup(arg0) => unsafe { syscall1(231, arg0) }, + Syscall::EpollWait(arg0, arg1, arg2, arg3) => unsafe { + syscall4(232, arg0, arg1, arg2, arg3) + }, + Syscall::EpollCtl(arg0, arg1, arg2, arg3) => unsafe { + syscall4(233, arg0, arg1, arg2, arg3) + }, + Syscall::Tgkill(arg0, arg1, arg2) => unsafe { syscall3(234, arg0, arg1, arg2) }, + Syscall::Utimes(arg0, arg1) => unsafe { syscall2(235, arg0, arg1) }, + Syscall::Vserver => unsafe { syscall0(236) }, + Syscall::Mbind(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(237, arg0, arg1, arg2, arg3, arg4, arg5) + }, + Syscall::SetMempolicy(arg0, arg1, arg2) => unsafe { syscall3(238, arg0, arg1, arg2) }, + Syscall::GetMempolicy(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(239, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::MqOpen(arg0, arg1, arg2, arg3) => unsafe { syscall4(240, arg0, arg1, arg2, arg3) }, + Syscall::MqUnlink(arg0) => unsafe { syscall1(241, arg0) }, + Syscall::MqTimedsend(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(242, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::MqTimedreceive(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(243, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::MqNotify(arg0, arg1) => unsafe { syscall2(244, arg0, arg1) }, + Syscall::MqGetsetattr(arg0, arg1, arg2) => unsafe { syscall3(245, arg0, arg1, arg2) }, + Syscall::KexecLoad(arg0, arg1, arg2, arg3) => unsafe { + syscall4(246, arg0, arg1, arg2, arg3) + }, + Syscall::Waitid(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(247, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::AddKey(arg0, arg1, arg2, arg3) => unsafe { syscall4(248, arg0, arg1, arg2, arg3) }, + Syscall::RequestKey(arg0, arg1, arg2) => unsafe { syscall3(249, arg0, arg1, arg2) }, + Syscall::Keyctl(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(250, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::IoprioSet(arg0, arg1, arg2) => unsafe { syscall3(251, arg0, arg1, arg2) }, + Syscall::IoprioGet(arg0, arg1) => unsafe { syscall2(252, arg0, arg1) }, + Syscall::InotifyInit => unsafe { syscall0(253) }, + Syscall::InotifyAddWatch(arg0, arg1, arg2) => unsafe { syscall3(254, arg0, arg1, arg2) }, + Syscall::InotifyRmWatch(arg0, arg1) => unsafe { syscall2(255, arg0, arg1) }, + Syscall::MigratePages(arg0, arg1, arg2, arg3) => unsafe { + syscall4(256, arg0, arg1, arg2, arg3) + }, + Syscall::Openat(arg0, arg1, arg2, arg3) => unsafe { syscall4(257, arg0, arg1, arg2, arg3) }, + Syscall::Mkdirat(arg0, arg1, arg2) => unsafe { syscall3(258, arg0, arg1, arg2) }, + Syscall::Mknodat(arg0, arg1, arg2, arg3) => unsafe { + syscall4(259, arg0, arg1, arg2, arg3) + }, + Syscall::Fchownat(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(260, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Futimesat(arg0, arg1, arg2) => unsafe { syscall3(261, arg0, arg1, arg2) }, + Syscall::Newfstatat(arg0, arg1, arg2, arg3) => unsafe { + syscall4(262, arg0, arg1, arg2, arg3) + }, + Syscall::Unlinkat(arg0, arg1, arg2) => unsafe { syscall3(263, arg0, arg1, arg2) }, + Syscall::Renameat(arg0, arg1, arg2, arg3) => unsafe { + syscall4(264, arg0, arg1, arg2, arg3) + }, + Syscall::Linkat(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(265, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Symlinkat(arg0, arg1, arg2) => unsafe { syscall3(266, arg0, arg1, arg2) }, + Syscall::Readlinkat(arg0, arg1, arg2, arg3) => unsafe { + syscall4(267, arg0, arg1, arg2, arg3) + }, + Syscall::Fchmodat(arg0, arg1, arg2) => unsafe { syscall3(268, arg0, arg1, arg2) }, + Syscall::Faccessat(arg0, arg1, arg2) => unsafe { syscall3(269, arg0, arg1, arg2) }, + Syscall::Pselect6(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(270, arg0, arg1, arg2, arg3, arg4, arg5) + }, + Syscall::Ppoll(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(271, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Unshare(arg0) => unsafe { syscall1(272, arg0) }, + Syscall::SetRobustList(arg0, arg1) => unsafe { syscall2(273, arg0, arg1) }, + Syscall::GetRobustList(arg0, arg1, arg2) => unsafe { syscall3(274, arg0, arg1, arg2) }, + Syscall::Splice(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(275, arg0, arg1, arg2, arg3, arg4, arg5) + }, + Syscall::Tee(arg0, arg1, arg2, arg3) => unsafe { syscall4(276, arg0, arg1, arg2, arg3) }, + Syscall::SyncFileRange(arg0, arg1, arg2, arg3) => unsafe { + syscall4(277, arg0, arg1, arg2, arg3) + }, + Syscall::Vmsplice(arg0, arg1, arg2, arg3) => unsafe { + syscall4(278, arg0, arg1, arg2, arg3) + }, + Syscall::MovePages(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(279, arg0, arg1, arg2, arg3, arg4, arg5) + }, + Syscall::Utimensat(arg0, arg1, arg2, arg3) => unsafe { + syscall4(280, arg0, arg1, arg2, arg3) + }, + Syscall::EpollPwait(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(281, arg0, arg1, arg2, arg3, arg4, arg5) + }, + Syscall::Signalfd(arg0, arg1, arg2) => unsafe { syscall3(282, arg0, arg1, arg2) }, + Syscall::TimerfdCreate(arg0, arg1) => unsafe { syscall2(283, arg0, arg1) }, + Syscall::Eventfd(arg0, arg1) => unsafe { syscall2(284, arg0, arg1) }, + Syscall::Fallocate(arg0, arg1, arg2, arg3) => unsafe { + syscall4(285, arg0, arg1, arg2, arg3) + }, + Syscall::TimerfdSettime(arg0, arg1, arg2, arg3) => unsafe { + syscall4(286, arg0, arg1, arg2, arg3) + }, + Syscall::TimerfdGettime(arg0, arg1) => unsafe { syscall2(287, arg0, arg1) }, + Syscall::Accept4(arg0, arg1, arg2, arg3) => unsafe { + syscall4(288, arg0, arg1, arg2, arg3) + }, + Syscall::Signalfd4(arg0, arg1, arg2, arg3) => unsafe { + syscall4(289, arg0, arg1, arg2, arg3) + }, + Syscall::Eventfd2(arg0, arg1) => unsafe { syscall2(290, arg0, arg1) }, + Syscall::EpollCreate1(arg0) => unsafe { syscall1(291, arg0) }, + Syscall::Dup3(arg0, arg1, arg2) => unsafe { syscall3(292, arg0, arg1, arg2) }, + Syscall::Pipe2(arg0, arg1) => unsafe { syscall2(293, arg0, arg1) }, + Syscall::InotifyInit1(arg0) => unsafe { syscall1(294, arg0) }, + Syscall::Preadv(arg0, arg1, arg2, arg3) => unsafe { syscall4(295, arg0, arg1, arg2, arg3) }, + Syscall::Pwritev(arg0, arg1, arg2, arg3) => unsafe { + syscall4(296, arg0, arg1, arg2, arg3) + }, + Syscall::RtTgsigqueueinfo(arg0, arg1, arg2, arg3) => unsafe { + syscall4(297, arg0, arg1, arg2, arg3) + }, + Syscall::PerfEventOpen(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(298, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Recvmmsg(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(299, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::FanotifyInit(arg0, arg1) => unsafe { syscall2(300, arg0, arg1) }, + Syscall::FanotifyMark(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(301, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Prlimit64(arg0, arg1, arg2, arg3) => unsafe { + syscall4(302, arg0, arg1, arg2, arg3) + }, + Syscall::NameToHandleAt(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(303, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::OpenByHandleAt(arg0, arg1, arg2) => unsafe { syscall3(304, arg0, arg1, arg2) }, + Syscall::ClockAdjtime(arg0, arg1) => unsafe { syscall2(305, arg0, arg1) }, + Syscall::Syncfs(arg0) => unsafe { syscall1(306, arg0) }, + Syscall::Sendmmsg(arg0, arg1, arg2, arg3) => unsafe { + syscall4(307, arg0, arg1, arg2, arg3) + }, + Syscall::Setns(arg0, arg1) => unsafe { syscall2(308, arg0, arg1) }, + Syscall::Getcpu(arg0, arg1, arg2) => unsafe { syscall3(309, arg0, arg1, arg2) }, + Syscall::ProcessVmReadv(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(310, arg0, arg1, arg2, arg3, arg4, arg5) + }, + Syscall::ProcessVmWritev(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(311, arg0, arg1, arg2, arg3, arg4, arg5) + }, + Syscall::Kcmp(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(312, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::FinitModule(arg0, arg1, arg2) => unsafe { syscall3(313, arg0, arg1, arg2) }, + Syscall::SchedSetattr(arg0, arg1, arg2) => unsafe { syscall3(314, arg0, arg1, arg2) }, + Syscall::SchedGetattr(arg0, arg1, arg2, arg3) => unsafe { + syscall4(315, arg0, arg1, arg2, arg3) + }, + Syscall::Renameat2(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(316, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Seccomp(arg0, arg1, arg2) => unsafe { syscall3(317, arg0, arg1, arg2) }, + Syscall::Getrandom(arg0, arg1, arg2) => unsafe { syscall3(318, arg0, arg1, arg2) }, + Syscall::MemfdCreate(arg0, arg1) => unsafe { syscall2(319, arg0, arg1) }, + Syscall::KexecFileLoad(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(320, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Bpf(arg0, arg1, arg2) => unsafe { syscall3(321, arg0, arg1, arg2) }, + Syscall::Execveat(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(322, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Userfaultfd(arg0) => unsafe { syscall1(323, arg0) }, + Syscall::Membarrier(arg0, arg1) => unsafe { syscall2(324, arg0, arg1) }, + Syscall::Mlock2(arg0, arg1, arg2) => unsafe { syscall3(325, arg0, arg1, arg2) }, + Syscall::CopyFileRange(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(326, arg0, arg1, arg2, arg3, arg4, arg5) + }, + Syscall::Preadv2(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(327, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Pwritev2(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(328, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::PkeyMprotect(arg0, arg1, arg2, arg3) => unsafe { + syscall4(329, arg0, arg1, arg2, arg3) + }, + Syscall::PkeyAlloc(arg0, arg1) => unsafe { syscall2(330, arg0, arg1) }, + Syscall::PkeyFree(arg0) => unsafe { syscall1(331, arg0) }, + Syscall::Statx(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(332, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::IoPgetevents(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(333, arg0, arg1, arg2, arg3, arg4, arg5) + }, + Syscall::Rseq(arg0, arg1, arg2, arg3) => unsafe { syscall4(334, arg0, arg1, arg2, arg3) }, + Syscall::PidfdSendSignal(arg0, arg1, arg2, arg3) => unsafe { + syscall4(424, arg0, arg1, arg2, arg3) + }, + Syscall::IoUringSetup(arg0, arg1) => unsafe { syscall2(425, arg0, arg1) }, + Syscall::IoUringEnter(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(426, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::IoUringRegister(arg0, arg1, arg2, arg3) => unsafe { + syscall4(427, arg0, arg1, arg2, arg3) + }, + Syscall::OpenTree(arg0, arg1, arg2) => unsafe { syscall3(428, arg0, arg1, arg2) }, + Syscall::MoveMount(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(429, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Fsopen(arg0, arg1, arg2) => unsafe { syscall3(430, arg0, arg1, arg2) }, + Syscall::Fsconfig(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(431, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Fsmount(arg0, arg1, arg2) => unsafe { syscall3(432, arg0, arg1, arg2) }, + Syscall::Fspick(arg0, arg1, arg2) => unsafe { syscall3(433, arg0, arg1, arg2) }, + Syscall::PidfdOpen(arg0, arg1) => unsafe { syscall2(434, arg0, arg1) }, + Syscall::Clone3(arg0, arg1) => unsafe { syscall2(435, arg0, arg1) }, + Syscall::CloseRange(arg0, arg1, arg2) => unsafe { syscall3(436, arg0, arg1, arg2) }, + Syscall::Openat2(arg0, arg1, arg2, arg3) => unsafe { + syscall4(437, arg0, arg1, arg2, arg3) + }, + Syscall::PidfdGetfd(arg0, arg1, arg2) => unsafe { syscall3(438, arg0, arg1, arg2) }, + Syscall::Faccessat2(arg0, arg1, arg2, arg3) => unsafe { + syscall4(439, arg0, arg1, arg2, arg3) + }, + Syscall::ProcessMadvise(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(440, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::EpollPwait2(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(441, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::MountSetattr(arg0, arg1, arg2, arg3) => unsafe { + syscall4(442, arg0, arg1, arg2, arg3) + }, + Syscall::QuotactlFd(arg0, arg1, arg2, arg3) => unsafe { + syscall4(443, arg0, arg1, arg2, arg3) + }, + Syscall::LandlockCreateRuleset(arg0, arg1, arg2) => unsafe { + syscall3(444, arg0, arg1, arg2) + }, + Syscall::LandlockAddRule(arg0, arg1, arg2, arg3) => unsafe { + syscall4(445, arg0, arg1, arg2, arg3) + }, + Syscall::LandlockRestrictSelf(arg0, arg1) => unsafe { syscall2(446, arg0, arg1) }, + Syscall::MemfdSecret(arg0) => unsafe { syscall1(447, arg0) }, + Syscall::ProcessMrelease(arg0, arg1) => unsafe { syscall2(448, arg0, arg1) }, + Syscall::FutexWaitv(arg0, arg1, arg2) => unsafe { syscall3(449, arg0, arg1, arg2) }, + Syscall::SetMempolicyHomeNode(arg0, arg1, arg2) => unsafe { + syscall3(450, arg0, arg1, arg2) + }, + Syscall::Cachestat(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(451, arg0, arg1, arg2, arg3, arg4) + }, + Syscall::Fchmodat2(arg0, arg1, arg2, arg3) => unsafe { + syscall4(452, arg0, arg1, arg2, arg3) + }, + Syscall::MapShadowStack(arg0, arg1) => unsafe { syscall2(453, arg0, arg1) }, + Syscall::FutexWake(arg0, arg1, arg2) => unsafe { syscall3(454, arg0, arg1, arg2) }, + Syscall::FutexWait(arg0, arg1, arg2) => unsafe { syscall3(455, arg0, arg1, arg2) }, + Syscall::FutexRequeue(arg0, arg1, arg2, arg3) => unsafe { + syscall4(456, arg0, arg1, arg2, arg3) + }, + Syscall::Statmount(arg0, arg1, arg2) => unsafe { syscall3(457, arg0, arg1, arg2) }, + Syscall::Listmount(arg0, arg1, arg2) => unsafe { syscall3(458, arg0, arg1, arg2) }, + Syscall::LsmGetSelfAttr(arg0, arg1, arg2, arg3) => unsafe { + syscall4(459, arg0, arg1, arg2, arg3) + }, + Syscall::LsmSetSelfAttr(arg0, arg1, arg2) => unsafe { syscall3(460, arg0, arg1, arg2) }, + Syscall::LsmListModules(arg0, arg1) => unsafe { syscall2(461, arg0, arg1) }, + Syscall::Unknown(syscall_num, args) => match args { + [arg0, arg1, arg2, arg3, arg4, arg5] => unsafe { + syscall6(syscall_num, arg0, arg1, arg2, arg3, arg4, arg5) + }, + _ => unreachable!(), + }, + } +} diff --git a/src/host.rs b/src/host.rs new file mode 100644 index 0000000..3f0052c --- /dev/null +++ b/src/host.rs @@ -0,0 +1,52 @@ +use std::{ + io::{BufReader, BufWriter, Read, Write}, + net::TcpStream, +}; + +use syscall_lib::{ProgramMemory, Syscall}; + +use crate::syscall_exec; + +pub struct Host { + stream: TcpStream, + reader: BufReader, + writer: BufWriter, + // memory: ProgramMemory, +} + +impl Host { + pub fn new() -> Result { + let stream = TcpStream::connect("localhost:1234")?; + let reader = BufReader::new(stream.try_clone()?); + let writer = BufWriter::new(stream.try_clone()?); + Ok(Host { + stream, + reader, + writer, + // memory: ProgramMemory::new(), + }) + } + + pub fn execute(&mut self, syscall: &Syscall) -> isize { + let bytes = syscall.encode(); + + self.writer + .write_all(&u32::to_be_bytes(bytes.len() as u32)) + .unwrap(); + self.writer.write_all(&bytes).unwrap(); + self.writer.flush().unwrap(); + + println!("{:?} -> ", syscall); + + // let response = syscall_exec::execute_syscall(syscall); + + let mut response = [0u8; 8]; + self.reader.read_exact(&mut response).unwrap(); + + let response = isize::from_be_bytes(response); + + println!("{:?}", response); + + response + } +} diff --git a/src/lib.rs b/src/lib.rs index fdd87c0..62eb924 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,9 @@ +mod host; +mod syscall_exec; #[allow(dead_code)] mod syscall_intercept; -mod syscalls; + +use syscall_lib::syscall_should_proxy; use libc::exit; use std::{ @@ -11,32 +14,22 @@ use std::{ }; use syscall_intercept::*; -static mut STREAM: Option> = None; -static mut WRITER: Option>> = None; +use crate::host::Host; + +static mut HOST: Option> = None; #[ctor::ctor] fn start() { unsafe { - STREAM = Some({ - match TcpStream::connect("127.0.0.1:1234") { - Ok(stream) => Mutex::new(stream), + HOST = Some({ + match Host::new() { + Ok(host) => Mutex::new(host), Err(e) => { eprintln!("Failed to connect to server: {}", e); exit(1); } } }); - - WRITER = Some(Mutex::new(BufWriter::new( - #[allow(static_mut_refs)] - STREAM - .as_ref() - .unwrap() - .lock() - .unwrap() - .try_clone() - .unwrap(), - ))); } unsafe { set_hook_fn(hook) }; @@ -75,50 +68,54 @@ impl Drop for InterceptGuard { } extern "C" fn hook( - syscall_num: isize, - arg0: isize, - arg1: isize, - arg2: isize, - arg3: isize, - arg4: isize, - arg5: isize, - _result: &mut isize, + syscall_num: usize, + arg0: usize, + arg1: usize, + arg2: usize, + arg3: usize, + arg4: usize, + arg5: usize, + result: &mut isize, ) -> InterceptResult { // detect and avoid recursive interception let _guard = match InterceptGuard::try_lock() { Some(g) => g, - None => return InterceptResult::Forward, + None => { + println!("Disabled!"); + return InterceptResult::Forward; + } }; - if !syscalls::syscall_should_proxy(syscall_num) { - return InterceptResult::Forward; - } + // if syscall_should_proxy(syscall_num) { + // return InterceptResult::Forward; + // } unsafe { unset_hook_fn(); } + let args = [arg0, arg1, arg2, arg3, arg4, arg5]; + let syscall = syscall_lib::create_syscall(syscall_num, args); + + if !syscall_should_proxy(&syscall) { + return InterceptResult::Forward; + } + // Return if is print // if syscall_num == libc::SYS_write as _ && arg0 == 1 { // return InterceptResult::Forward; // } - // let args = [arg0, arg1, arg2, arg3, arg4, arg5]; - // let desc = if let Some(desc) = syscalls::get_syscall_desc(syscall_num, args) { - // "test" - // } else { - // "test" - // }; + // if syscall_num == libc::SYS_close as _ && arg0 == 1 { + // return InterceptResult::Forward; + // } + + // println!("{:?}", desc); unsafe { #[allow(static_mut_refs)] - if let Some(client) = WRITER.as_ref() { - client - .lock() - .unwrap() - .write_all(&format!("Data: {:?}\n", syscall_num).as_bytes()) - .unwrap(); - client.lock().unwrap().flush().unwrap(); + if let Some(host) = HOST.as_ref() { + *result = host.lock().unwrap().execute(&syscall); } } @@ -126,5 +123,5 @@ extern "C" fn hook( set_hook_fn(hook); } - InterceptResult::Forward + InterceptResult::Hook } diff --git a/src/syscall_exec.rs b/src/syscall_exec.rs new file mode 100644 index 0000000..caf09be --- /dev/null +++ b/src/syscall_exec.rs @@ -0,0 +1,688 @@ +use syscall_lib::Syscall; +use syscaller::{syscall0, syscall1, syscall2, syscall3, syscall4, syscall5, syscall6}; + +// fn syscall0(number: isize) -> isize { +// unsafe { syscaller::syscall0(number as usize) } +// } + +// fn syscall1(number: isize, *arg0: isize) -> isize { +// unsafe { syscaller::syscall1(number as usize, *arg0 as usize) } +// } + +// fn syscall2(number: isize, *arg0: isize, *arg1: isize) -> isize { +// unsafe { syscaller::syscall2(number as usize, *arg0 as usize, *arg1 as usize) } +// } + +// fn syscall3(number: isize, *arg0: isize, *arg1: isize, *arg2: isize) -> isize { +// unsafe { syscaller::syscall3(number as usize, *arg0 as usize, *arg1 as usize, *arg2 as usize) } +// } + +// fn syscall4(number: isize, *arg0: isize, *arg1: isize, *arg2: isize, *arg3: isize) -> isize { +// unsafe { +// syscaller::syscall4( +// number as usize, +// arg0 as usize, +// arg1 as usize, +// arg2 as usize, +// arg3 as usize, +// ) +// } +// } + +// fn syscall5( +// number: isize, +// arg0: isize, +// arg1: isize, +// arg2: isize, +// arg3: isize, +// arg4: isize, +// ) -> isize { +// unsafe { +// syscaller::syscall5( +// number as usize, +// arg0 as usize, +// arg1 as usize, +// arg2 as usize, +// arg3 as usize, +// arg4 as usize, +// ) +// } +// } + +// fn syscall6( +// number: isize, +// arg0: isize, +// arg1: isize, +// arg2: isize, +// arg3: isize, +// arg4: isize, +// arg5: isize, +// ) -> isize { +// unsafe { +// syscaller::syscall6( +// number as usize, +// arg0 as usize, +// arg1 as usize, +// arg2 as usize, +// arg3 as usize, +// arg4 as usize, +// arg5 as usize, +// ) +// } +// } + +// The Syscall enum and type aliases from the previous response are assumed to be present here. +#[allow(unused_unsafe)] +pub fn execute_syscall(syscall_obj: &Syscall) -> isize { + match syscall_obj { + Syscall::Read(arg0, arg1, arg2) => unsafe { syscall3(0, *arg0, *arg1, *arg2) }, + Syscall::Write(arg0, arg1, arg2) => unsafe { syscall3(1, *arg0, *arg1, *arg2) }, + Syscall::Open(arg0, arg1, arg2) => unsafe { syscall3(2, *arg0, *arg1, *arg2) }, + Syscall::Close(arg0) => unsafe { syscall1(3, *arg0) }, + Syscall::Stat(arg0, arg1) => unsafe { syscall2(4, *arg0, *arg1) }, + Syscall::Fstat(arg0, arg1) => unsafe { syscall2(5, *arg0, *arg1) }, + Syscall::Lstat(arg0, arg1) => unsafe { syscall2(6, *arg0, *arg1) }, + Syscall::Poll(arg0, arg1, arg2) => unsafe { syscall3(7, *arg0, *arg1, *arg2) }, + Syscall::Lseek(arg0, arg1, arg2) => unsafe { syscall3(8, *arg0, *arg1, *arg2) }, + Syscall::Mmap(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(9, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5) + }, + Syscall::Mprotect(arg0, arg1, arg2) => unsafe { syscall3(10, *arg0, *arg1, *arg2) }, + Syscall::Munmap(arg0, arg1) => unsafe { syscall2(11, *arg0, *arg1) }, + Syscall::Brk(arg0) => unsafe { syscall1(12, *arg0) }, + Syscall::RtSigaction(arg0, arg1, arg2, arg3) => unsafe { + syscall4(13, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::RtSigprocmask(arg0, arg1, arg2, arg3) => unsafe { + syscall4(14, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::RtSigreturn => unsafe { syscall0(15) }, + Syscall::Ioctl(arg0, arg1, arg2) => unsafe { syscall3(16, *arg0, *arg1, *arg2) }, + Syscall::Pread64(arg0, arg1, arg2, arg3) => unsafe { + syscall4(17, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Pwrite64(arg0, arg1, arg2, arg3) => unsafe { + syscall4(18, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Readv(arg0, arg1, arg2) => unsafe { syscall3(19, *arg0, *arg1, *arg2) }, + Syscall::Writev(arg0, arg1, arg2) => unsafe { syscall3(20, *arg0, *arg1, *arg2) }, + Syscall::Access(arg0, arg1) => unsafe { syscall2(21, *arg0, *arg1) }, + Syscall::Pipe(arg0) => unsafe { syscall1(22, *arg0) }, + Syscall::Select(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(23, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::SchedYield => unsafe { syscall0(24) }, + Syscall::Mremap(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(25, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Msync(arg0, arg1, arg2) => unsafe { syscall3(26, *arg0, *arg1, *arg2) }, + Syscall::Mincore(arg0, arg1, arg2) => unsafe { syscall3(27, *arg0, *arg1, *arg2) }, + Syscall::Madvise(arg0, arg1, arg2) => unsafe { syscall3(28, *arg0, *arg1, *arg2) }, + Syscall::Shmget(arg0, arg1, arg2) => unsafe { syscall3(29, *arg0, *arg1, *arg2) }, + Syscall::Shmat(arg0, arg1, arg2) => unsafe { syscall3(30, *arg0, *arg1, *arg2) }, + Syscall::Shmctl(arg0, arg1, arg2) => unsafe { syscall3(31, *arg0, *arg1, *arg2) }, + Syscall::Dup(arg0) => unsafe { syscall1(32, *arg0) }, + Syscall::Dup2(arg0, arg1) => unsafe { syscall2(33, *arg0, *arg1) }, + Syscall::Pause => unsafe { syscall0(34) }, + Syscall::Nanosleep(arg0, arg1) => unsafe { syscall2(35, *arg0, *arg1) }, + Syscall::Getitimer(arg0, arg1) => unsafe { syscall2(36, *arg0, *arg1) }, + Syscall::Alarm(arg0) => unsafe { syscall1(37, *arg0) }, + Syscall::Setitimer(arg0, arg1, arg2) => unsafe { syscall3(38, *arg0, *arg1, *arg2) }, + Syscall::Getpid => unsafe { syscall0(39) }, + Syscall::Sendfile(arg0, arg1, arg2, arg3) => unsafe { + syscall4(40, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Socket(arg0, arg1, arg2) => unsafe { syscall3(41, *arg0, *arg1, *arg2) }, + Syscall::Connect(arg0, arg1, arg2) => unsafe { syscall3(42, *arg0, *arg1, *arg2) }, + Syscall::Accept(arg0, arg1, arg2) => unsafe { syscall3(43, *arg0, *arg1, *arg2) }, + Syscall::Sendto(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(44, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5) + }, + Syscall::Recvfrom(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(45, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5) + }, + Syscall::Sendmsg(arg0, arg1, arg2) => unsafe { syscall3(46, *arg0, *arg1, *arg2) }, + Syscall::Recvmsg(arg0, arg1, arg2) => unsafe { syscall3(47, *arg0, *arg1, *arg2) }, + Syscall::Shutdown(arg0, arg1) => unsafe { syscall2(48, *arg0, *arg1) }, + Syscall::Bind(arg0, arg1, arg2) => unsafe { syscall3(49, *arg0, *arg1, *arg2) }, + Syscall::Listen(arg0, arg1) => unsafe { syscall2(50, *arg0, *arg1) }, + Syscall::Getsockname(arg0, arg1, arg2) => unsafe { syscall3(51, *arg0, *arg1, *arg2) }, + Syscall::Getpeername(arg0, arg1, arg2) => unsafe { syscall3(52, *arg0, *arg1, *arg2) }, + Syscall::Socketpair(arg0, arg1, arg2, arg3) => unsafe { + syscall4(53, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Setsockopt(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(54, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Getsockopt(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(55, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Clone(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(56, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Fork => unsafe { syscall0(57) }, + Syscall::Vfork => unsafe { syscall0(58) }, + Syscall::Execve(arg0, arg1, arg2) => unsafe { syscall3(59, *arg0, *arg1, *arg2) }, + Syscall::Exit(arg0) => unsafe { syscall1(60, *arg0) }, + Syscall::Wait4(arg0, arg1, arg2, arg3) => unsafe { + syscall4(61, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Kill(arg0, arg1) => unsafe { syscall2(62, *arg0, *arg1) }, + Syscall::Uname(arg0) => unsafe { syscall1(63, *arg0) }, + Syscall::Semget(arg0, arg1, arg2) => unsafe { syscall3(64, *arg0, *arg1, *arg2) }, + Syscall::Semop(arg0, arg1, arg2) => unsafe { syscall3(65, *arg0, *arg1, *arg2) }, + Syscall::Semctl(arg0, arg1, arg2, arg3) => unsafe { + syscall4(66, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Shmdt(arg0) => unsafe { syscall1(67, *arg0) }, + Syscall::Msgget(arg0, arg1) => unsafe { syscall2(68, *arg0, *arg1) }, + Syscall::Msgsnd(arg0, arg1, arg2, arg3) => unsafe { + syscall4(69, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Msgrcv(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(70, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Msgctl(arg0, arg1, arg2) => unsafe { syscall3(71, *arg0, *arg1, *arg2) }, + Syscall::Fcntl(arg0, arg1, arg2) => unsafe { syscall3(72, *arg0, *arg1, *arg2) }, + Syscall::Flock(arg0, arg1) => unsafe { syscall2(73, *arg0, *arg1) }, + Syscall::Fsync(arg0) => unsafe { syscall1(74, *arg0) }, + Syscall::Fdatasync(arg0) => unsafe { syscall1(75, *arg0) }, + Syscall::Truncate(arg0, arg1) => unsafe { syscall2(76, *arg0, *arg1) }, + Syscall::Ftruncate(arg0, arg1) => unsafe { syscall2(77, *arg0, *arg1) }, + Syscall::Getdents(arg0, arg1, arg2) => unsafe { syscall3(78, *arg0, *arg1, *arg2) }, + Syscall::Getcwd(arg0, arg1) => unsafe { syscall2(79, *arg0, *arg1) }, + Syscall::Chdir(arg0) => unsafe { syscall1(80, *arg0) }, + Syscall::Fchdir(arg0) => unsafe { syscall1(81, *arg0) }, + Syscall::Rename(arg0, arg1) => unsafe { syscall2(82, *arg0, *arg1) }, + Syscall::Mkdir(arg0, arg1) => unsafe { syscall2(83, *arg0, *arg1) }, + Syscall::Rmdir(arg0) => unsafe { syscall1(84, *arg0) }, + Syscall::Creat(arg0, arg1) => unsafe { syscall2(85, *arg0, *arg1) }, + Syscall::Link(arg0, arg1) => unsafe { syscall2(86, *arg0, *arg1) }, + Syscall::Unlink(arg0) => unsafe { syscall1(87, *arg0) }, + Syscall::Symlink(arg0, arg1) => unsafe { syscall2(88, *arg0, *arg1) }, + Syscall::Readlink(arg0, arg1, arg2) => unsafe { syscall3(89, *arg0, *arg1, *arg2) }, + Syscall::Chmod(arg0, arg1) => unsafe { syscall2(90, *arg0, *arg1) }, + Syscall::Fchmod(arg0, arg1) => unsafe { syscall2(91, *arg0, *arg1) }, + Syscall::Chown(arg0, arg1, arg2) => unsafe { syscall3(92, *arg0, *arg1, *arg2) }, + Syscall::Fchown(arg0, arg1, arg2) => unsafe { syscall3(93, *arg0, *arg1, *arg2) }, + Syscall::Lchown(arg0, arg1, arg2) => unsafe { syscall3(94, *arg0, *arg1, *arg2) }, + Syscall::Umask(arg0) => unsafe { syscall1(95, *arg0) }, + Syscall::Gettimeofday(arg0, arg1) => unsafe { syscall2(96, *arg0, *arg1) }, + Syscall::Getrlimit(arg0, arg1) => unsafe { syscall2(97, *arg0, *arg1) }, + Syscall::Getrusage(arg0, arg1) => unsafe { syscall2(98, *arg0, *arg1) }, + Syscall::Sysinfo(arg0) => unsafe { syscall1(99, *arg0) }, + Syscall::Times(arg0) => unsafe { syscall1(100, *arg0) }, + Syscall::Ptrace(arg0, arg1, arg2, arg3) => unsafe { + syscall4(101, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Getuid => unsafe { syscall0(102) }, + Syscall::Syslog(arg0, arg1, arg2) => unsafe { syscall3(103, *arg0, *arg1, *arg2) }, + Syscall::Getgid => unsafe { syscall0(104) }, + Syscall::Setuid(arg0) => unsafe { syscall1(105, *arg0) }, + Syscall::Setgid(arg0) => unsafe { syscall1(106, *arg0) }, + Syscall::Geteuid => unsafe { syscall0(107) }, + Syscall::Getegid => unsafe { syscall0(108) }, + Syscall::Setpgid(arg0, arg1) => unsafe { syscall2(109, *arg0, *arg1) }, + Syscall::Getppid => unsafe { syscall0(110) }, + Syscall::Getpgrp => unsafe { syscall0(111) }, + Syscall::Setsid => unsafe { syscall0(112) }, + Syscall::Setreuid(arg0, arg1) => unsafe { syscall2(113, *arg0, *arg1) }, + Syscall::Setregid(arg0, arg1) => unsafe { syscall2(114, *arg0, *arg1) }, + Syscall::Getgroups(arg0, arg1) => unsafe { syscall2(115, *arg0, *arg1) }, + Syscall::Setgroups(arg0, arg1) => unsafe { syscall2(116, *arg0, *arg1) }, + Syscall::Setresuid(arg0, arg1, arg2) => unsafe { syscall3(117, *arg0, *arg1, *arg2) }, + Syscall::Getresuid(arg0, arg1, arg2) => unsafe { syscall3(118, *arg0, *arg1, *arg2) }, + Syscall::Setresgid(arg0, arg1, arg2) => unsafe { syscall3(119, *arg0, *arg1, *arg2) }, + Syscall::Getresgid(arg0, arg1, arg2) => unsafe { syscall3(120, *arg0, *arg1, *arg2) }, + Syscall::Getpgid(arg0) => unsafe { syscall1(121, *arg0) }, + Syscall::Setfsuid(arg0) => unsafe { syscall1(122, *arg0) }, + Syscall::Setfsgid(arg0) => unsafe { syscall1(123, *arg0) }, + Syscall::Getsid(arg0) => unsafe { syscall1(124, *arg0) }, + Syscall::Capget(arg0, arg1) => unsafe { syscall2(125, *arg0, *arg1) }, + Syscall::Capset(arg0, arg1) => unsafe { syscall2(126, *arg0, *arg1) }, + Syscall::RtSigpending(arg0, arg1) => unsafe { syscall2(127, *arg0, *arg1) }, + Syscall::RtSigtimedwait(arg0, arg1, arg2, arg3) => unsafe { + syscall4(128, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::RtSigqueueinfo(arg0, arg1, arg2) => unsafe { syscall3(129, *arg0, *arg1, *arg2) }, + Syscall::RtSigsuspend(arg0, arg1) => unsafe { syscall2(130, *arg0, *arg1) }, + Syscall::Sigaltstack(arg0, arg1) => unsafe { syscall2(131, *arg0, *arg1) }, + Syscall::Utime(arg0, arg1) => unsafe { syscall2(132, *arg0, *arg1) }, + Syscall::Mknod(arg0, arg1, arg2) => unsafe { syscall3(133, *arg0, *arg1, *arg2) }, + Syscall::Uselib(arg0) => unsafe { syscall1(134, *arg0) }, + Syscall::Personality(arg0) => unsafe { syscall1(135, *arg0) }, + Syscall::Ustat(arg0, arg1) => unsafe { syscall2(136, *arg0, *arg1) }, + Syscall::Statfs(arg0, arg1) => unsafe { syscall2(137, *arg0, *arg1) }, + Syscall::Fstatfs(arg0, arg1) => unsafe { syscall2(138, *arg0, *arg1) }, + Syscall::Sysfs(arg0, arg1, arg2) => unsafe { syscall3(139, *arg0, *arg1, *arg2) }, + Syscall::Getpriority(arg0, arg1) => unsafe { syscall2(140, *arg0, *arg1) }, + Syscall::Setpriority(arg0, arg1, arg2) => unsafe { syscall3(141, *arg0, *arg1, *arg2) }, + Syscall::SchedSetparam(arg0, arg1) => unsafe { syscall2(142, *arg0, *arg1) }, + Syscall::SchedGetparam(arg0, arg1) => unsafe { syscall2(143, *arg0, *arg1) }, + Syscall::SchedSetscheduler(arg0, arg1, arg2) => unsafe { + syscall3(144, *arg0, *arg1, *arg2) + }, + Syscall::SchedGetscheduler(arg0) => unsafe { syscall1(145, *arg0) }, + Syscall::SchedGetPriorityMax(arg0) => unsafe { syscall1(146, *arg0) }, + Syscall::SchedGetPriorityMin(arg0) => unsafe { syscall1(147, *arg0) }, + Syscall::SchedRrGetInterval(arg0, arg1) => unsafe { syscall2(148, *arg0, *arg1) }, + Syscall::Mlock(arg0, arg1) => unsafe { syscall2(149, *arg0, *arg1) }, + Syscall::Munlock(arg0, arg1) => unsafe { syscall2(150, *arg0, *arg1) }, + Syscall::Mlockall(arg0) => unsafe { syscall1(151, *arg0) }, + Syscall::Munlockall => unsafe { syscall0(152) }, + Syscall::Vhangup => unsafe { syscall0(153) }, + Syscall::ModifyLdt(arg0, arg1, arg2) => unsafe { syscall3(154, *arg0, *arg1, *arg2) }, + Syscall::PivotRoot(arg0, arg1) => unsafe { syscall2(155, *arg0, *arg1) }, + Syscall::_Sysctl(arg0) => unsafe { syscall1(156, *arg0) }, + Syscall::Prctl(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(157, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::ArchPrctl(arg0, arg1) => unsafe { syscall2(158, *arg0, *arg1) }, + Syscall::Adjtimex(arg0) => unsafe { syscall1(159, *arg0) }, + Syscall::Setrlimit(arg0, arg1) => unsafe { syscall2(160, *arg0, *arg1) }, + Syscall::Chroot(arg0) => unsafe { syscall1(161, *arg0) }, + Syscall::Sync => unsafe { syscall0(162) }, + Syscall::Acct(arg0) => unsafe { syscall1(163, *arg0) }, + Syscall::Settimeofday(arg0, arg1) => unsafe { syscall2(164, *arg0, *arg1) }, + Syscall::Mount(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(165, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Umount2(arg0, arg1) => unsafe { syscall2(166, *arg0, *arg1) }, + Syscall::Swapon(arg0, arg1) => unsafe { syscall2(167, *arg0, *arg1) }, + Syscall::Swapoff(arg0) => unsafe { syscall1(168, *arg0) }, + Syscall::Reboot(arg0, arg1, arg2, arg3) => unsafe { + syscall4(169, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Sethostname(arg0, arg1) => unsafe { syscall2(170, *arg0, *arg1) }, + Syscall::Setdomainname(arg0, arg1) => unsafe { syscall2(171, *arg0, *arg1) }, + Syscall::Iopl(arg0) => unsafe { syscall1(172, *arg0) }, + Syscall::Ioperm(arg0, arg1, arg2) => unsafe { syscall3(173, *arg0, *arg1, *arg2) }, + Syscall::CreateModule(arg0, arg1) => unsafe { syscall2(174, *arg0, *arg1) }, + Syscall::InitModule(arg0, arg1, arg2) => unsafe { syscall3(175, *arg0, *arg1, *arg2) }, + Syscall::DeleteModule(arg0, arg1) => unsafe { syscall2(176, *arg0, *arg1) }, + Syscall::GetKernelSyms(arg0) => unsafe { syscall1(177, *arg0) }, + Syscall::QueryModule(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(178, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Quotactl(arg0, arg1, arg2, arg3) => unsafe { + syscall4(179, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Nfsservctl(arg0, arg1, arg2) => unsafe { syscall3(180, *arg0, *arg1, *arg2) }, + Syscall::Getpmsg => unsafe { syscall0(181) }, + Syscall::Putpmsg => unsafe { syscall0(182) }, + Syscall::AfsSyscall => unsafe { syscall0(183) }, + Syscall::Tuxcall => unsafe { syscall0(184) }, + Syscall::Security => unsafe { syscall0(185) }, + Syscall::Gettid => unsafe { syscall0(186) }, + Syscall::Readahead(arg0, arg1, arg2) => unsafe { syscall3(187, *arg0, *arg1, *arg2) }, + Syscall::Setxattr(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(188, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Lsetxattr(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(189, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Fsetxattr(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(190, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Getxattr(arg0, arg1, arg2, arg3) => unsafe { + syscall4(191, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Lgetxattr(arg0, arg1, arg2, arg3) => unsafe { + syscall4(192, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Fgetxattr(arg0, arg1, arg2, arg3) => unsafe { + syscall4(193, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Listxattr(arg0, arg1, arg2) => unsafe { syscall3(194, *arg0, *arg1, *arg2) }, + Syscall::Llistxattr(arg0, arg1, arg2) => unsafe { syscall3(195, *arg0, *arg1, *arg2) }, + Syscall::Flistxattr(arg0, arg1, arg2) => unsafe { syscall3(196, *arg0, *arg1, *arg2) }, + Syscall::Removexattr(arg0, arg1) => unsafe { syscall2(197, *arg0, *arg1) }, + Syscall::Lremovexattr(arg0, arg1) => unsafe { syscall2(198, *arg0, *arg1) }, + Syscall::Fremovexattr(arg0, arg1) => unsafe { syscall2(199, *arg0, *arg1) }, + Syscall::Tkill(arg0, arg1) => unsafe { syscall2(200, *arg0, *arg1) }, + Syscall::Time(arg0) => unsafe { syscall1(201, *arg0) }, + Syscall::Futex(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(202, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5) + }, + Syscall::SchedSetaffinity(arg0, arg1, arg2) => unsafe { + syscall3(203, *arg0, *arg1, *arg2) + }, + Syscall::SchedGetaffinity(arg0, arg1, arg2) => unsafe { + syscall3(204, *arg0, *arg1, *arg2) + }, + Syscall::SetThreadArea(arg0) => unsafe { syscall1(205, *arg0) }, + Syscall::IoSetup(arg0, arg1) => unsafe { syscall2(206, *arg0, *arg1) }, + Syscall::IoDestroy(arg0) => unsafe { syscall1(207, *arg0) }, + Syscall::IoGetevents(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(208, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::IoSubmit(arg0, arg1, arg2) => unsafe { syscall3(209, *arg0, *arg1, *arg2) }, + Syscall::IoCancel(arg0, arg1, arg2) => unsafe { syscall3(210, *arg0, *arg1, *arg2) }, + Syscall::GetThreadArea(arg0) => unsafe { syscall1(211, *arg0) }, + Syscall::LookupDcookie(arg0, arg1, arg2, arg3) => unsafe { + syscall4(212, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::EpollCreate(arg0) => unsafe { syscall1(213, *arg0) }, + Syscall::EpollCtlOld => unsafe { syscall0(214) }, + Syscall::EpollWaitOld => unsafe { syscall0(215) }, + Syscall::RemapFilePages(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(216, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Getdents64(arg0, arg1, arg2) => unsafe { syscall3(217, *arg0, *arg1, *arg2) }, + Syscall::SetTidAddress(arg0) => unsafe { syscall1(218, *arg0) }, + Syscall::RestartSyscall => unsafe { syscall0(219) }, + Syscall::Semtimedop(arg0, arg1, arg2, arg3) => unsafe { + syscall4(220, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Fadvise64(arg0, arg1, arg2, arg3) => unsafe { + syscall4(221, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::TimerCreate(arg0, arg1, arg2) => unsafe { syscall3(222, *arg0, *arg1, *arg2) }, + Syscall::TimerSettime(arg0, arg1, arg2, arg3) => unsafe { + syscall4(223, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::TimerGettime(arg0, arg1) => unsafe { syscall2(224, *arg0, *arg1) }, + Syscall::TimerGetoverrun(arg0) => unsafe { syscall1(225, *arg0) }, + Syscall::TimerDelete(arg0) => unsafe { syscall1(226, *arg0) }, + Syscall::ClockSettime(arg0, arg1) => unsafe { syscall2(227, *arg0, *arg1) }, + Syscall::ClockGettime(arg0, arg1) => unsafe { syscall2(228, *arg0, *arg1) }, + Syscall::ClockGetres(arg0, arg1) => unsafe { syscall2(229, *arg0, *arg1) }, + Syscall::ClockNanosleep(arg0, arg1, arg2, arg3) => unsafe { + syscall4(230, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::ExitGroup(arg0) => unsafe { syscall1(231, *arg0) }, + Syscall::EpollWait(arg0, arg1, arg2, arg3) => unsafe { + syscall4(232, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::EpollCtl(arg0, arg1, arg2, arg3) => unsafe { + syscall4(233, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Tgkill(arg0, arg1, arg2) => unsafe { syscall3(234, *arg0, *arg1, *arg2) }, + Syscall::Utimes(arg0, arg1) => unsafe { syscall2(235, *arg0, *arg1) }, + Syscall::Vserver => unsafe { syscall0(236) }, + Syscall::Mbind(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(237, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5) + }, + Syscall::SetMempolicy(arg0, arg1, arg2) => unsafe { syscall3(238, *arg0, *arg1, *arg2) }, + Syscall::GetMempolicy(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(239, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::MqOpen(arg0, arg1, arg2, arg3) => unsafe { + syscall4(240, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::MqUnlink(arg0) => unsafe { syscall1(241, *arg0) }, + Syscall::MqTimedsend(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(242, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::MqTimedreceive(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(243, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::MqNotify(arg0, arg1) => unsafe { syscall2(244, *arg0, *arg1) }, + Syscall::MqGetsetattr(arg0, arg1, arg2) => unsafe { syscall3(245, *arg0, *arg1, *arg2) }, + Syscall::KexecLoad(arg0, arg1, arg2, arg3) => unsafe { + syscall4(246, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Waitid(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(247, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::AddKey(arg0, arg1, arg2, arg3) => unsafe { + syscall4(248, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::RequestKey(arg0, arg1, arg2) => unsafe { syscall3(249, *arg0, *arg1, *arg2) }, + Syscall::Keyctl(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(250, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::IoprioSet(arg0, arg1, arg2) => unsafe { syscall3(251, *arg0, *arg1, *arg2) }, + Syscall::IoprioGet(arg0, arg1) => unsafe { syscall2(252, *arg0, *arg1) }, + Syscall::InotifyInit => unsafe { syscall0(253) }, + Syscall::InotifyAddWatch(arg0, arg1, arg2) => unsafe { syscall3(254, *arg0, *arg1, *arg2) }, + Syscall::InotifyRmWatch(arg0, arg1) => unsafe { syscall2(255, *arg0, *arg1) }, + Syscall::MigratePages(arg0, arg1, arg2, arg3) => unsafe { + syscall4(256, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Openat(arg0, arg1, arg2, arg3) => unsafe { + syscall4(257, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Mkdirat(arg0, arg1, arg2) => unsafe { syscall3(258, *arg0, *arg1, *arg2) }, + Syscall::Mknodat(arg0, arg1, arg2, arg3) => unsafe { + syscall4(259, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Fchownat(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(260, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Futimesat(arg0, arg1, arg2) => unsafe { syscall3(261, *arg0, *arg1, *arg2) }, + Syscall::Newfstatat(arg0, arg1, arg2, arg3) => unsafe { + syscall4(262, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Unlinkat(arg0, arg1, arg2) => unsafe { syscall3(263, *arg0, *arg1, *arg2) }, + Syscall::Renameat(arg0, arg1, arg2, arg3) => unsafe { + syscall4(264, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Linkat(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(265, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Symlinkat(arg0, arg1, arg2) => unsafe { syscall3(266, *arg0, *arg1, *arg2) }, + Syscall::Readlinkat(arg0, arg1, arg2, arg3) => unsafe { + syscall4(267, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Fchmodat(arg0, arg1, arg2) => unsafe { syscall3(268, *arg0, *arg1, *arg2) }, + Syscall::Faccessat(arg0, arg1, arg2) => unsafe { syscall3(269, *arg0, *arg1, *arg2) }, + Syscall::Pselect6(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(270, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5) + }, + Syscall::Ppoll(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(271, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Unshare(arg0) => unsafe { syscall1(272, *arg0) }, + Syscall::SetRobustList(arg0, arg1) => unsafe { syscall2(273, *arg0, *arg1) }, + Syscall::GetRobustList(arg0, arg1, arg2) => unsafe { syscall3(274, *arg0, *arg1, *arg2) }, + Syscall::Splice(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(275, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5) + }, + Syscall::Tee(arg0, arg1, arg2, arg3) => unsafe { + syscall4(276, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::SyncFileRange(arg0, arg1, arg2, arg3) => unsafe { + syscall4(277, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Vmsplice(arg0, arg1, arg2, arg3) => unsafe { + syscall4(278, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::MovePages(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(279, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5) + }, + Syscall::Utimensat(arg0, arg1, arg2, arg3) => unsafe { + syscall4(280, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::EpollPwait(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(281, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5) + }, + Syscall::Signalfd(arg0, arg1, arg2) => unsafe { syscall3(282, *arg0, *arg1, *arg2) }, + Syscall::TimerfdCreate(arg0, arg1) => unsafe { syscall2(283, *arg0, *arg1) }, + Syscall::Eventfd(arg0, arg1) => unsafe { syscall2(284, *arg0, *arg1) }, + Syscall::Fallocate(arg0, arg1, arg2, arg3) => unsafe { + syscall4(285, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::TimerfdSettime(arg0, arg1, arg2, arg3) => unsafe { + syscall4(286, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::TimerfdGettime(arg0, arg1) => unsafe { syscall2(287, *arg0, *arg1) }, + Syscall::Accept4(arg0, arg1, arg2, arg3) => unsafe { + syscall4(288, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Signalfd4(arg0, arg1, arg2, arg3) => unsafe { + syscall4(289, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Eventfd2(arg0, arg1) => unsafe { syscall2(290, *arg0, *arg1) }, + Syscall::EpollCreate1(arg0) => unsafe { syscall1(291, *arg0) }, + Syscall::Dup3(arg0, arg1, arg2) => unsafe { syscall3(292, *arg0, *arg1, *arg2) }, + Syscall::Pipe2(arg0, arg1) => unsafe { syscall2(293, *arg0, *arg1) }, + Syscall::InotifyInit1(arg0) => unsafe { syscall1(294, *arg0) }, + Syscall::Preadv(arg0, arg1, arg2, arg3) => unsafe { + syscall4(295, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Pwritev(arg0, arg1, arg2, arg3) => unsafe { + syscall4(296, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::RtTgsigqueueinfo(arg0, arg1, arg2, arg3) => unsafe { + syscall4(297, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::PerfEventOpen(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(298, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Recvmmsg(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(299, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::FanotifyInit(arg0, arg1) => unsafe { syscall2(300, *arg0, *arg1) }, + Syscall::FanotifyMark(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(301, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Prlimit64(arg0, arg1, arg2, arg3) => unsafe { + syscall4(302, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::NameToHandleAt(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(303, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::OpenByHandleAt(arg0, arg1, arg2) => unsafe { syscall3(304, *arg0, *arg1, *arg2) }, + Syscall::ClockAdjtime(arg0, arg1) => unsafe { syscall2(305, *arg0, *arg1) }, + Syscall::Syncfs(arg0) => unsafe { syscall1(306, *arg0) }, + Syscall::Sendmmsg(arg0, arg1, arg2, arg3) => unsafe { + syscall4(307, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Setns(arg0, arg1) => unsafe { syscall2(308, *arg0, *arg1) }, + Syscall::Getcpu(arg0, arg1, arg2) => unsafe { syscall3(309, *arg0, *arg1, *arg2) }, + Syscall::ProcessVmReadv(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(310, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5) + }, + Syscall::ProcessVmWritev(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(311, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5) + }, + Syscall::Kcmp(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(312, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::FinitModule(arg0, arg1, arg2) => unsafe { syscall3(313, *arg0, *arg1, *arg2) }, + Syscall::SchedSetattr(arg0, arg1, arg2) => unsafe { syscall3(314, *arg0, *arg1, *arg2) }, + Syscall::SchedGetattr(arg0, arg1, arg2, arg3) => unsafe { + syscall4(315, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Renameat2(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(316, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Seccomp(arg0, arg1, arg2) => unsafe { syscall3(317, *arg0, *arg1, *arg2) }, + Syscall::Getrandom(arg0, arg1, arg2) => unsafe { syscall3(318, *arg0, *arg1, *arg2) }, + Syscall::MemfdCreate(arg0, arg1) => unsafe { syscall2(319, *arg0, *arg1) }, + Syscall::KexecFileLoad(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(320, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Bpf(arg0, arg1, arg2) => unsafe { syscall3(321, *arg0, *arg1, *arg2) }, + Syscall::Execveat(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(322, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Userfaultfd(arg0) => unsafe { syscall1(323, *arg0) }, + Syscall::Membarrier(arg0, arg1) => unsafe { syscall2(324, *arg0, *arg1) }, + Syscall::Mlock2(arg0, arg1, arg2) => unsafe { syscall3(325, *arg0, *arg1, *arg2) }, + Syscall::CopyFileRange(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(326, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5) + }, + Syscall::Preadv2(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(327, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Pwritev2(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(328, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::PkeyMprotect(arg0, arg1, arg2, arg3) => unsafe { + syscall4(329, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::PkeyAlloc(arg0, arg1) => unsafe { syscall2(330, *arg0, *arg1) }, + Syscall::PkeyFree(arg0) => unsafe { syscall1(331, *arg0) }, + Syscall::Statx(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(332, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::IoPgetevents(arg0, arg1, arg2, arg3, arg4, arg5) => unsafe { + syscall6(333, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5) + }, + Syscall::Rseq(arg0, arg1, arg2, arg3) => unsafe { + syscall4(334, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::PidfdSendSignal(arg0, arg1, arg2, arg3) => unsafe { + syscall4(424, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::IoUringSetup(arg0, arg1) => unsafe { syscall2(425, *arg0, *arg1) }, + Syscall::IoUringEnter(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(426, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::IoUringRegister(arg0, arg1, arg2, arg3) => unsafe { + syscall4(427, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::OpenTree(arg0, arg1, arg2) => unsafe { syscall3(428, *arg0, *arg1, *arg2) }, + Syscall::MoveMount(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(429, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Fsopen(arg0, arg1, arg2) => unsafe { syscall3(430, *arg0, *arg1, *arg2) }, + Syscall::Fsconfig(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(431, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Fsmount(arg0, arg1, arg2) => unsafe { syscall3(432, *arg0, *arg1, *arg2) }, + Syscall::Fspick(arg0, arg1, arg2) => unsafe { syscall3(433, *arg0, *arg1, *arg2) }, + Syscall::PidfdOpen(arg0, arg1) => unsafe { syscall2(434, *arg0, *arg1) }, + Syscall::Clone3(arg0, arg1) => unsafe { syscall2(435, *arg0, *arg1) }, + Syscall::CloseRange(arg0, arg1, arg2) => unsafe { syscall3(436, *arg0, *arg1, *arg2) }, + Syscall::Openat2(arg0, arg1, arg2, arg3) => unsafe { + syscall4(437, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::PidfdGetfd(arg0, arg1, arg2) => unsafe { syscall3(438, *arg0, *arg1, *arg2) }, + Syscall::Faccessat2(arg0, arg1, arg2, arg3) => unsafe { + syscall4(439, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::ProcessMadvise(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(440, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::EpollPwait2(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(441, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::MountSetattr(arg0, arg1, arg2, arg3) => unsafe { + syscall4(442, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::QuotactlFd(arg0, arg1, arg2, arg3) => unsafe { + syscall4(443, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::LandlockCreateRuleset(arg0, arg1, arg2) => unsafe { + syscall3(444, *arg0, *arg1, *arg2) + }, + Syscall::LandlockAddRule(arg0, arg1, arg2, arg3) => unsafe { + syscall4(445, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::LandlockRestrictSelf(arg0, arg1) => unsafe { syscall2(446, *arg0, *arg1) }, + Syscall::MemfdSecret(arg0) => unsafe { syscall1(447, *arg0) }, + Syscall::ProcessMrelease(arg0, arg1) => unsafe { syscall2(448, *arg0, *arg1) }, + Syscall::FutexWaitv(arg0, arg1, arg2) => unsafe { syscall3(449, *arg0, *arg1, *arg2) }, + Syscall::SetMempolicyHomeNode(arg0, arg1, arg2) => unsafe { + syscall3(450, *arg0, *arg1, *arg2) + }, + Syscall::Cachestat(arg0, arg1, arg2, arg3, arg4) => unsafe { + syscall5(451, *arg0, *arg1, *arg2, *arg3, *arg4) + }, + Syscall::Fchmodat2(arg0, arg1, arg2, arg3) => unsafe { + syscall4(452, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::MapShadowStack(arg0, arg1) => unsafe { syscall2(453, *arg0, *arg1) }, + Syscall::FutexWake(arg0, arg1, arg2) => unsafe { syscall3(454, *arg0, *arg1, *arg2) }, + Syscall::FutexWait(arg0, arg1, arg2) => unsafe { syscall3(455, *arg0, *arg1, *arg2) }, + Syscall::FutexRequeue(arg0, arg1, arg2, arg3) => unsafe { + syscall4(456, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::Statmount(arg0, arg1, arg2) => unsafe { syscall3(457, *arg0, *arg1, *arg2) }, + Syscall::Listmount(arg0, arg1, arg2) => unsafe { syscall3(458, *arg0, *arg1, *arg2) }, + Syscall::LsmGetSelfAttr(arg0, arg1, arg2, arg3) => unsafe { + syscall4(459, *arg0, *arg1, *arg2, *arg3) + }, + Syscall::LsmSetSelfAttr(arg0, arg1, arg2) => unsafe { syscall3(460, *arg0, *arg1, *arg2) }, + Syscall::LsmListModules(arg0, arg1) => unsafe { syscall2(461, *arg0, *arg1) }, + Syscall::Unknown(syscall_num, args) => match args { + [arg0, arg1, arg2, arg3, arg4, arg5] => unsafe { + syscall6(*syscall_num, *arg0, *arg1, *arg2, *arg3, *arg4, *arg5) + }, + _ => unreachable!(), + }, + } +} diff --git a/src/syscall_intercept.rs b/src/syscall_intercept.rs index 8cbe0b9..92e1556 100644 --- a/src/syscall_intercept.rs +++ b/src/syscall_intercept.rs @@ -2,7 +2,7 @@ unsafe extern "C" { static mut intercept_hook_point: Option; - pub fn syscall_no_intercept(num: isize, ...) -> isize; + pub fn syscall_no_intercept(num: usize, ...) -> isize; } /// Set syscall intercept hook function. @@ -29,13 +29,13 @@ pub unsafe fn unset_hook_fn() { /// The type of hook function. pub type HookFn = extern "C" fn( - num: isize, - a0: isize, - a1: isize, - a2: isize, - a3: isize, - a4: isize, - a5: isize, + num: usize, + a0: usize, + a1: usize, + a2: usize, + a3: usize, + a4: usize, + a5: usize, result: &mut isize, ) -> InterceptResult; diff --git a/src/syscalls.rs b/src/syscalls.rs deleted file mode 100644 index c81326a..0000000 --- a/src/syscalls.rs +++ /dev/null @@ -1,3167 +0,0 @@ -pub fn syscall_should_proxy(n: isize) -> bool { - match n { - 0 => true, // Read - 1 => true, // Write - 2 => false, // Open - 3 => false, // Close - 4 => false, // Stat - 5 => false, // Fstat - 6 => false, // Lstat - 7 => false, // Poll - 8 => false, // Lseek - 9 => false, // Mmap - 10 => false, // Mprotect - 11 => false, // Munmap - 12 => false, // Brk - 13 => false, // RtSigaction - 14 => false, // RtSigprocmask - 15 => false, // RtSigreturn - 16 => false, // Ioctl - 17 => false, // Pread64 - 18 => false, // Pwrite64 - 19 => false, // Readv - 20 => false, // Writev - 21 => false, // Access - 22 => false, // Pipe - 23 => false, // Select - 24 => false, // SchedYield - 25 => false, // Mremap - 26 => false, // Msync - 27 => false, // Mincore - 28 => false, // Madvise - 29 => false, // Shmget - 30 => false, // Shmat - 31 => false, // Shmctl - 32 => false, // Dup - 33 => false, // Dup2 - 34 => false, // Pause - 35 => false, // Nanosleep - 36 => false, // Getitimer - 37 => false, // Alarm - 38 => false, // Setitimer - 39 => false, // Getpid - 40 => false, // Sendfile - 41 => false, // Socket - 42 => false, // Connect - 43 => false, // Accept - 44 => false, // Sendto - 45 => false, // Recvfrom - 46 => false, // Sendmsg - 47 => false, // Recvmsg - 48 => false, // Shutdown - 49 => false, // Bind - 50 => false, // Listen - 51 => false, // Getsockname - 52 => false, // Getpeername - 53 => false, // Socketpair - 54 => false, // Setsockopt - 55 => false, // Getsockopt - 56 => false, // Clone - 57 => false, // Fork - 58 => false, // Vfork - 59 => false, // Execve - 60 => false, // Exit - 61 => false, // Wait4 - 62 => false, // Kill - 63 => false, // Uname - 64 => false, // Semget - 65 => false, // Semop - 66 => false, // Semctl - 67 => false, // Shmdt - 68 => false, // Msgget - 69 => false, // Msgsnd - 70 => false, // Msgrcv - 71 => false, // Msgctl - 72 => false, // Fcntl - 73 => false, // Flock - 74 => false, // Fsync - 75 => false, // Fdatasync - 76 => false, // Truncate - 77 => false, // Ftruncate - 78 => false, // Getdents - 79 => false, // Getcwd - 80 => false, // Chdir - 81 => false, // Fchdir - 82 => false, // Rename - 83 => false, // Mkdir - 84 => false, // Rmdir - 85 => false, // Creat - 86 => false, // Link - 87 => false, // Unlink - 88 => false, // Symlink - 89 => false, // Readlink - 90 => false, // Chmod - 91 => false, // Fchmod - 92 => false, // Chown - 93 => false, // Fchown - 94 => false, // Lchown - 95 => false, // Umask - 96 => false, // Gettimeofday - 97 => false, // Getrlimit - 98 => false, // Getrusage - 99 => false, // Sysinfo - 100 => false, // Times - 101 => false, // Ptrace - 102 => false, // Getuid - 103 => false, // Syslog - 104 => false, // Getgid - 105 => false, // Setuid - 106 => false, // Setgid - 107 => false, // Geteuid - 108 => false, // Getegid - 109 => false, // Setpgid - 110 => false, // Getpgrp - 111 => false, // Setsid - 112 => false, // Setreuid - 113 => false, // Setregid - 114 => false, // Getgroups - 115 => false, // Setgroups - 116 => false, // Setresuid - 117 => false, // Getresuid - 118 => false, // Setresgid - 119 => false, // Getresgid - 120 => false, // Getpgid - 121 => false, // Setfsuid - 122 => false, // Setfsgid - 123 => false, // Getsid - 124 => false, // Capget - 125 => false, // Capset - 126 => false, // RtSigpending - 127 => false, // RtSigtimedwait - 128 => false, // RtSigqueueinfo - 129 => false, // RtSigsuspend - 130 => false, // Sigaltstack - 131 => false, // Utime - 132 => false, // Mknod - 133 => false, // Uselib - 134 => false, // Personality - 135 => false, // Ustat - 136 => false, // Statfs - 137 => false, // Fstatfs - 138 => false, // Sysfs - 139 => false, // Getpriority - 140 => false, // Setpriority - 141 => false, // SchedSetparam - 142 => false, // SchedGetparam - 143 => false, // SchedSetscheduler - 144 => false, // SchedGetscheduler - 145 => false, // SchedGetPriorityMax - 146 => false, // SchedGetPriorityMin - 147 => false, // SchedRrGetInterval - 148 => false, // Mlock - 149 => false, // Munlock - 150 => false, // Mlockall - 151 => false, // Munlockall - 152 => false, // Vhangup - 153 => false, // ModifyLdt - 154 => false, // PivotRoot - 155 => false, // Sysctl - 156 => false, // Prctl - 157 => false, // ArchPrctl - 158 => false, // Adjtimex - 159 => false, // Setrlimit - 160 => false, // Chroot - 161 => false, // Sync - 162 => false, // Acct - 163 => false, // Settimeofday - 164 => false, // Mount - 165 => false, // Umount2 - 166 => false, // Swapon - 167 => false, // Swapoff - 168 => false, // Reboot - 169 => false, // Sethostname - 170 => false, // Setdomainname - 171 => false, // Iopl - 172 => false, // Ioperm - 173 => false, // Gettid - 174 => false, // Readahead - 175 => false, // Setxattr - 176 => false, // Lsetxattr - 177 => false, // Fsetxattr - 178 => false, // Getxattr - 179 => false, // Lgetxattr - 180 => false, // Fgetxattr - 181 => false, // Listxattr - 182 => false, // Llistxattr - 183 => false, // Flistxattr - 184 => false, // Removexattr - 185 => false, // Lremovexattr - 186 => false, // Fremovexattr - 187 => false, // Tkill - 188 => false, // Time - 189 => false, // Futex - 190 => false, // SchedSetaffinity - 191 => false, // SchedGetaffinity - 192 => false, // SetThreadArea - 193 => false, // IoSetup - 194 => false, // IoDestroy - 195 => false, // IoGetevents - 196 => false, // IoSubmit - 197 => false, // IoCancel - 198 => false, // GetThreadArea - 199 => false, // LookupDcookie - 200 => false, // EpollCreate - 201 => false, // Getdents64 - 202 => false, // SetTidAddress - 203 => false, // Semtimedop - 204 => false, // Fadvise64 - 205 => false, // TimerCreate - 206 => false, // TimerSettime - 207 => false, // TimerGettime - 208 => false, // TimerGetoverrun - 209 => false, // TimerDelete - 210 => false, // ClockSettime - 211 => false, // ClockGettime - 212 => false, // ClockGetres - 213 => false, // ClockNanosleep - 214 => false, // ExitGroup - 215 => false, // EpollWait - 216 => false, // EpollCtl - 217 => false, // Tgkill - 218 => false, // Utimes - 219 => false, // Mbind - 220 => false, // SetMempolicy - 221 => false, // GetMempolicy - 222 => false, // MqOpen - 223 => false, // MqUnlink - 224 => false, // MqTimedsend - 225 => false, // MqTimedreceive - 226 => false, // MqNotify - 227 => false, // MqGetsetattr - 228 => false, // KexecLoad - 229 => false, // Waitid - 230 => false, // AddKey - 231 => false, // RequestKey - 232 => false, // Keyctl - 233 => false, // IoprioSet - 234 => false, // IoprioGet - 235 => false, // InotifyInit - 236 => false, // InotifyAddWatch - 237 => false, // InotifyRmWatch - 238 => false, // MigratePages - 239 => false, // Openat - 240 => false, // Mkdirat - 241 => false, // Mknodat - 242 => false, // Fchownat - 243 => false, // Futimesat - 244 => false, // Newfstatat - 245 => false, // Unlinkat - 246 => false, // Renameat - 247 => false, // Linkat - 248 => false, // Symlinkat - 249 => false, // Readlinkat - 250 => false, // Fchmodat - 251 => false, // Faccessat - 252 => false, // Pselect6 - 253 => false, // Ppoll - 254 => false, // Unshare - 255 => false, // SetRobustList - 256 => false, // GetRobustList - 257 => false, // Splice - 258 => false, // Tee - 259 => false, // SyncFileRange - 260 => false, // Vmsplice - 261 => false, // MovePages - 262 => false, // Utimensat - 263 => false, // EpollPwait - 264 => false, // Signalfd - 265 => false, // TimerfdCreate - 266 => false, // Eventfd - 267 => false, // Fallocate - 268 => false, // TimerfdSettime - 269 => false, // TimerfdGettime - 270 => false, // Accept4 - 271 => false, // Signalfd4 - 272 => false, // Eventfd2 - 273 => false, // EpollCreate1 - 274 => false, // Dup3 - 275 => false, // Pipe2 - 276 => false, // InotifyInit1 - 277 => false, // Preadv - 278 => false, // Pwritev - 279 => false, // RtTgsigqueueinfo - 280 => false, // PerfEventOpen - 281 => false, // Recvmmsg - 282 => false, // FanotifyInit - 283 => false, // FanotifyMark - 284 => false, // Prlimit64 - 285 => false, // NameToHandleAt - 286 => false, // OpenByHandleAt - 287 => false, // ClockAdjtime - 288 => false, // Syncfs - 289 => false, // Sendmmsg - 290 => false, // Setns - 291 => false, // Getcpu - 292 => false, // ProcessVmReadv - 293 => false, // ProcessVmWritev - 294 => false, // Kcmp - 295 => false, // FinitModule - 296 => false, // SchedSetattr(Option), - 297 => false, // SchedGetattr(Option), - 298 => false, // Renameat2(Option), - 299 => false, // Seccomp(Option), - 300 => false, // Getrandom(Option), - 301 => false, // MemfdCreate(Option), - 302 => false, // KexecFileLoad(Option), - 303 => false, // Bpf(Option), - 304 => false, // Execveat(Option), - 305 => false, // Userfaultfd(Option), - 306 => false, // Membarrier(Option), - 307 => false, // Mlock2(Option), - 308 => false, // CopyFileRange(Option), - 309 => false, // Preadv2(Option), - 310 => false, // Pwritev2(Option), - 311 => false, // PkeyMprotect(Option), - 312 => false, // PkeyAlloc(Option), - 313 => false, // PkeyFree(Option), - _ => false, - } -} - -#[derive(Debug, Clone, PartialEq)] -pub enum SyscallDesc { - Read { - fd: isize, - buf: isize, - count: isize, - }, - Write { - fd: isize, - buf: isize, - count: isize, - }, - Open { - pathname: isize, - flags: isize, - mode: isize, - }, - Close { - fd: isize, - }, - Stat { - pathname: isize, - statbuf: isize, - }, - Fstat { - fd: isize, - statbuf: isize, - }, - Lstat { - pathname: isize, - statbuf: isize, - }, - Poll { - fds: isize, - nfds: isize, - timeout: isize, - }, - Lseek { - fd: isize, - offset: isize, - whence: isize, - }, - Mmap { - addr: isize, - length: isize, - prot: isize, - flags: isize, - fd: isize, - offset: isize, - }, - Mprotect { - addr: isize, - len: isize, - prot: isize, - }, - Munmap { - addr: isize, - length: isize, - prot: isize, - flags: isize, - fd: isize, - offset: isize, - }, - Brk { - addr: isize, - }, - RtSigaction { - sig: isize, - act: isize, - oldact: isize, - }, - RtSigprocmask { - how: isize, - set: isize, - oldset: isize, - sigsetsize: isize, - }, - RtSigreturn, - Ioctl { - fd: isize, - cmd: isize, - arg: isize, - }, - Pread64 { - fd: isize, - buf: isize, - count: isize, - offset: isize, - }, - Pwrite64 { - fd: isize, - buf: isize, - count: isize, - offset: isize, - }, - Readv { - fd: isize, - iov: isize, - iovcnt: isize, - }, - Writev { - fd: isize, - iov: isize, - iovcnt: isize, - }, - Access { - pathname: isize, - mode: isize, - }, - Pipe { - pipefd: isize, - }, - Select { - nfds: isize, - readfds: isize, - writefds: isize, - exceptfds: isize, - timeout: isize, - }, - SchedYield, - Mremap { - old_addr: isize, - old_size: isize, - new_size: isize, - flags: isize, - new_addr: isize, - }, - Msync { - addr: isize, - length: isize, - flags: isize, - }, - Mincore { - addr: isize, - length: isize, - vec: isize, - }, - Madvise { - addr: isize, - length: isize, - advice: isize, - }, - Shmget { - key: isize, - size: isize, - shmflg: isize, - }, - Shmat { - shmid: isize, - shmaddr: isize, - shmflg: isize, - }, - Shmctl { - shmid: isize, - cmd: isize, - buf: isize, - }, - Dup { - oldfd: isize, - }, - Dup2 { - oldfd: isize, - newfd: isize, - }, - Pause, - Nanosleep { - req: isize, - rem: isize, - }, - Getitimer { - which: isize, - curr_value: isize, - }, - Alarm { - seconds: isize, - }, - Setitimer { - which: isize, - new_value: isize, - old_value: isize, - }, - Getpid, - Sendfile { - out_fd: isize, - in_fd: isize, - offset: isize, - count: isize, - }, - Socket { - domain: isize, - socket_type: isize, - protocol: isize, - }, - Connect { - sockfd: isize, - addr: isize, - addrlen: isize, - }, - Accept { - sockfd: isize, - addr: isize, - addrlen: isize, - }, - Sendto { - sockfd: isize, - buf: isize, - len: isize, - flags: isize, - }, - Recvfrom { - sockfd: isize, - buf: isize, - len: isize, - flags: isize, - src_addr: isize, - addrlen: isize, - }, - Sendmsg { - sockfd: isize, - msg: isize, - flags: isize, - }, - Recvmsg { - sockfd: isize, - msg: isize, - flags: isize, - }, - Shutdown { - sockfd: isize, - how: isize, - }, - Bind { - sockfd: isize, - addr: isize, - addrlen: isize, - }, - Listen { - sockfd: isize, - backlog: isize, - }, - Getsockname { - sockfd: isize, - addr: isize, - addrlen: isize, - }, - Getpeername { - sockfd: isize, - addr: isize, - addrlen: isize, - }, - Socketpair { - domain: isize, - socket_type: isize, - protocol: isize, - sv: isize, - }, - Setsockopt { - sockfd: isize, - level: isize, - optname: isize, - optval: isize, - optlen: isize, - }, - Getsockopt { - sockfd: isize, - level: isize, - optname: isize, - optval: isize, - optlen: isize, - }, - Clone { - flags: isize, - stack: isize, - parent_tid: isize, - child_tid: isize, - tls: isize, - regs: isize, - }, - Fork, - Vfork, - Execve { - pathname: isize, - argv: isize, - envp: isize, - }, - Exit { - status: isize, - }, - Wait4 { - pid: isize, - wstatus: isize, - options: isize, - rusage: isize, - }, - Kill { - pid: isize, - sig: isize, - }, - Uname { - buf: isize, - }, - Semget { - key: isize, - nsems: isize, - semflg: isize, - }, - Semop { - semid: isize, - sops: isize, - nsops: isize, - }, - Semctl { - semid: isize, - semnum: isize, - cmd: isize, - arg1: isize, - arg2: isize, - arg3: isize, - }, - Shmdt { - shmaddr: isize, - }, - Msgget { - key: isize, - msgflg: isize, - }, - Msgsnd { - msqid: isize, - msgp: isize, - msgsz: isize, - msgflg: isize, - }, - Msgrcv { - msqid: isize, - msgp: isize, - msgsz: isize, - msgtyp: isize, - msgflg: isize, - }, - Msgctl { - msqid: isize, - cmd: isize, - buf: isize, - }, - Fcntl { - fd: isize, - cmd: isize, - arg: isize, - }, - Flock { - fd: isize, - operation: isize, - }, - Fsync { - fd: isize, - }, - Fdatasync { - fd: isize, - }, - Truncate { - path: isize, - length: isize, - }, - Ftruncate { - fd: isize, - length: isize, - }, - Getdents { - fd: isize, - dirp: isize, - count: isize, - }, - Getcwd { - buf: isize, - size: isize, - }, - Chdir { - path: isize, - }, - Fchdir { - fd: isize, - }, - Rename { - oldpath: isize, - newpath: isize, - }, - Mkdir { - pathname: isize, - mode: isize, - }, - Rmdir { - pathname: isize, - }, - Creat { - pathname: isize, - mode: isize, - }, - Link { - oldpath: isize, - newpath: isize, - }, - Unlink { - pathname: isize, - }, - Symlink { - target: isize, - linkpath: isize, - }, - Readlink { - pathname: isize, - buf: isize, - bufsiz: isize, - }, - Chmod { - pathname: isize, - mode: isize, - }, - Fchmod { - fd: isize, - mode: isize, - }, - Chown { - pathname: isize, - owner: isize, - group: isize, - }, - Fchown { - fd: isize, - owner: isize, - group: isize, - }, - Lchown { - pathname: isize, - owner: isize, - group: isize, - }, - Umask { - mask: isize, - }, - Gettimeofday { - tv: isize, - tz: isize, - }, - Getrlimit { - resource: isize, - rlim: isize, - }, - Getrusage { - who: isize, - usage: isize, - }, - Sysinfo { - info: isize, - arg2: isize, - }, - Times { - buf: isize, - }, - Ptrace { - request: isize, - pid: isize, - addr: isize, - data: isize, - }, - Getuid, - Syslog { - log_type: isize, - bufp: isize, - len: isize, - }, - Getgid, - Setuid { - uid: isize, - }, - Setgid { - gid: isize, - }, - Geteuid, - Getegid, - Setpgid, - Getpgrp, - Setsid, - Setreuid { - ruid: isize, - euid: isize, - }, - Setregid { - rgid: isize, - egid: isize, - }, - Getgroups { - size: isize, - list: isize, - }, - Setgroups { - size: isize, - list: isize, - }, - Setresuid { - ruid: isize, - euid: isize, - suid: isize, - }, - Getresuid { - ruid: isize, - euid: isize, - suid: isize, - }, - Setresgid { - rgid: isize, - egid: isize, - sgid: isize, - }, - Getresgid { - rgid: isize, - egid: isize, - sgid: isize, - }, - Getpgid { - pid: isize, - }, - Setfsuid { - fsuid: isize, - }, - Setfsgid { - fsgid: isize, - }, - Getsid { - pid: isize, - }, - Capget { - hdrp: isize, - datap: isize, - }, - Capset { - hdrp: isize, - datap: isize, - }, - RtSigpending { - set: isize, - }, - RtSigtimedwait { - set: isize, - info: isize, - timeout: isize, - sigsetsize: isize, - }, - RtSigqueueinfo { - pid: isize, - sig: isize, - info: isize, - }, - RtSigsuspend { - mask: isize, - sigsetsize: isize, - }, - Sigaltstack { - ss: isize, - old_ss: isize, - }, - Utime { - filename: isize, - times: isize, - }, - Mknod { - pathname: isize, - mode: isize, - dev: isize, - }, - Uselib { - library: isize, - }, - Personality { - persona: isize, - }, - Ustat { - dev: isize, - ubuf: isize, - }, - Statfs { - path: isize, - buf: isize, - }, - Fstatfs { - fd: isize, - buf: isize, - }, - Sysfs { - option: isize, - arg2: isize, - arg3: isize, - }, - Getpriority { - which: isize, - who: isize, - }, - Setpriority { - which: isize, - who: isize, - prio: isize, - }, - SchedSetparam { - pid: isize, - param: isize, - }, - SchedGetparam { - pid: isize, - param: isize, - }, - SchedSetscheduler { - pid: isize, - policy: isize, - param: isize, - }, - SchedGetscheduler { - pid: isize, - }, - SchedGetPriorityMax { - policy: isize, - }, - SchedGetPriorityMin { - policy: isize, - }, - SchedRrGetInterval { - pid: isize, - interval: isize, - }, - Mlock { - addr: isize, - len: isize, - }, - Munlock { - addr: isize, - len: isize, - }, - Mlockall { - flags: isize, - }, - Munlockall, - Vhangup, - ModifyLdt { - func: isize, - ptr: isize, - bytecount: isize, - }, - PivotRoot { - new_root: isize, - old_root: isize, - }, - Sysctl { - args: isize, - }, - Prctl { - option: isize, - arg2: isize, - arg3: isize, - arg4: isize, - arg5: isize, - }, - ArchPrctl { - code: isize, - addr: isize, - arg3: isize, - }, - Adjtimex { - buf: isize, - }, - Setrlimit { - resource: isize, - rlim: isize, - }, - Chroot { - path: isize, - }, - Sync, - Acct { - filename: isize, - }, - Settimeofday { - tv: isize, - tz: isize, - }, - Mount { - source: isize, - target: isize, - filesystemtype: isize, - mountflags: isize, - data: isize, - }, - Umount2 { - target: isize, - flags: isize, - }, - Swapon { - path: isize, - swapflags: isize, - }, - Swapoff { - path: isize, - }, - Reboot { - magic: isize, - magic2: isize, - cmd: isize, - arg: isize, - }, - Sethostname { - name: isize, - len: isize, - }, - Setdomainname { - name: isize, - len: isize, - }, - Iopl { - level: isize, - }, - Ioperm { - from: isize, - num: isize, - turn_on: isize, - }, - Gettid, - Readahead { - fd: isize, - offset: isize, - count: isize, - }, - Setxattr { - path: isize, - name: isize, - value: isize, - size: isize, - flags: isize, - }, - Lsetxattr { - path: isize, - name: isize, - value: isize, - size: isize, - flags: isize, - }, - Fsetxattr { - fd: isize, - name: isize, - value: isize, - size: isize, - flags: isize, - }, - Getxattr { - path: isize, - name: isize, - value: isize, - size: isize, - }, - Lgetxattr { - path: isize, - name: isize, - value: isize, - size: isize, - }, - Fgetxattr { - fd: isize, - name: isize, - value: isize, - size: isize, - }, - Listxattr { - path: isize, - list: isize, - size: isize, - }, - Llistxattr { - path: isize, - list: isize, - size: isize, - }, - Flistxattr { - path: isize, - list: isize, - size: isize, - }, - Removexattr { - path: isize, - name: isize, - }, - Lremovexattr { - path: isize, - name: isize, - }, - Fremovexattr { - fd: isize, - name: isize, - }, - Tkill { - tid: isize, - sig: isize, - }, - Time { - tloc: isize, - }, - Futex { - uaddr: isize, - futex_op: isize, - val: isize, - timeout: isize, - uaddr2: isize, - val3: isize, - }, - SchedSetaffinity { - pid: isize, - cpusetsize: isize, - mask: isize, - }, - SchedGetaffinity { - pid: isize, - cpusetsize: isize, - mask: isize, - }, - SetThreadArea { - u_info: isize, - }, - IoSetup { - nr_events: isize, - ctx_idp: isize, - }, - IoDestroy { - ctx_id: isize, - }, - IoGetevents { - ctx_id: isize, - min_nr: isize, - nr: isize, - events: isize, - timeout: isize, - }, - IoSubmit { - ctx_id: isize, - nr: isize, - iocbpp: isize, - }, - IoCancel { - ctx_id: isize, - iocb: isize, - result: isize, - }, - GetThreadArea { - u_info: isize, - }, - LookupDcookie { - cookie: isize, - buffer: isize, - len: isize, - }, - EpollCreate { - size: isize, - }, - Getdents64 { - fd: isize, - dirp: isize, - count: isize, - }, - SetTidAddress { - tidptr: isize, - }, - Semtimedop { - semid: isize, - sops: isize, - nsops: isize, - timeout: isize, - }, - Fadvise64 { - fd: isize, - offset: isize, - len: isize, - advice: isize, - }, - TimerCreate { - clockid: isize, - sevp: isize, - timerid: isize, - }, - TimerSettime { - timerid: isize, - flags: isize, - new_value: isize, - old_value: isize, - }, - TimerGettime { - timerid: isize, - curr_value: isize, - }, - TimerGetoverrun { - timerid: isize, - }, - TimerDelete { - timerid: isize, - }, - ClockSettime { - clockid: isize, - tp: isize, - }, - ClockGettime { - clockid: isize, - tp: isize, - }, - ClockGetres { - clockid: isize, - res: isize, - }, - ClockNanosleep { - clockid: isize, - flags: isize, - request: isize, - remain: isize, - }, - ExitGroup { - status: isize, - }, - EpollWait { - epfd: isize, - events: isize, - maxevents: isize, - timeout: isize, - }, - EpollCtl { - epfd: isize, - op: isize, - fd: isize, - event: isize, - }, - Tgkill { - tgid: isize, - tid: isize, - sig: isize, - }, - Utimes { - filename: isize, - times: isize, - }, - Mbind { - addr: isize, - len: isize, - mode: isize, - nodemask: isize, - maxnode: isize, - }, - SetMempolicy { - mode: isize, - nodemask: isize, - maxnode: isize, - }, - GetMempolicy { - mode: isize, - nodemask: isize, - maxnode: isize, - addr: isize, - flags: isize, - }, - MqOpen { - name: isize, - oflag: isize, - mode: isize, - attr: isize, - arg5: isize, - }, - MqUnlink { - name: isize, - }, - MqTimedsend { - mqdes: isize, - msg_ptr: isize, - msg_len: isize, - msg_prio: isize, - abs_timeout: isize, - }, - MqTimedreceive { - mqdes: isize, - msg_ptr: isize, - msg_len: isize, - msg_prio: isize, - abs_timeout: isize, - }, - MqNotify { - mqdes: isize, - sevp: isize, - }, - MqGetsetattr { - mqdes: isize, - newattr: isize, - oldattr: isize, - }, - KexecLoad { - entry: isize, - nr_segments: isize, - segments: isize, - flags: isize, - }, - Waitid { - idtype: isize, - id: isize, - infop: isize, - options: isize, - }, - AddKey { - key_type: isize, - description: isize, - payload: isize, - plen: isize, - keyring: isize, - }, - RequestKey { - key_type: isize, - description: isize, - callout_info: isize, - dest_keyring: isize, - }, - Keyctl { - operation: isize, - arg2: isize, - arg3: isize, - arg4: isize, - arg5: isize, - }, - IoprioSet { - which: isize, - who: isize, - ioprio: isize, - }, - IoprioGet { - which: isize, - who: isize, - }, - InotifyInit, - InotifyAddWatch { - fd: isize, - pathname: isize, - mask: isize, - }, - InotifyRmWatch { - fd: isize, - wd: isize, - }, - MigratePages { - pid: isize, - maxnode: isize, - old_nodes: isize, - new_nodes: isize, - }, - Openat { - dirfd: isize, - pathname: isize, - flags: isize, - mode: isize, - }, - Mkdirat { - dirfd: isize, - pathname: isize, - mode: isize, - }, - Mknodat { - dirfd: isize, - pathname: isize, - mode: isize, - dev: isize, - }, - Fchownat { - dirfd: isize, - pathname: isize, - owner: isize, - group: isize, - flags: isize, - }, - Futimesat { - dirfd: isize, - pathname: isize, - times: isize, - }, - Newfstatat { - dirfd: isize, - pathname: isize, - statbuf: isize, - flags: isize, - }, - Unlinkat { - dirfd: isize, - pathname: isize, - flags: isize, - }, - Renameat { - olddirfd: isize, - oldpath: isize, - newdirfd: isize, - newpath: isize, - }, - Linkat { - olddirfd: isize, - oldpath: isize, - newdirfd: isize, - newpath: isize, - flags: isize, - }, - Symlinkat { - olddirfd: isize, - oldpath: isize, - newpath: isize, - }, - Readlinkat { - dirfd: isize, - pathname: isize, - buf: isize, - bufsiz: isize, - }, - Fchmodat { - dirfd: isize, - pathname: isize, - mode: isize, - }, - Faccessat { - dirfd: isize, - pathname: isize, - mode: isize, - }, - Pselect6 { - nfds: isize, - readfds: isize, - writefds: isize, - exceptfds: isize, - timeout: isize, - sigmask: isize, - }, - Ppoll { - fds: isize, - nfds: isize, - tmo_p: isize, - sigmask: isize, - sigsetsize: isize, - }, - Unshare { - flags: isize, - }, - SetRobustList { - head: isize, - len: isize, - }, - GetRobustList { - pid: isize, - head_ptr: isize, - len_ptr: isize, - }, - Splice { - fd_in: isize, - off_in: isize, - fd_out: isize, - off_out: isize, - len: isize, - flags: isize, - }, - Tee { - fd_in: isize, - fd_out: isize, - len: isize, - flags: isize, - }, - SyncFileRange { - fd: isize, - offset: isize, - nbytes: isize, - flags: isize, - }, - Vmsplice { - fd: isize, - iov: isize, - nr_segs: isize, - flags: isize, - }, - MovePages { - pid: isize, - count: isize, - pages: isize, - nodes: isize, - status: isize, - flags: isize, - }, - Utimensat { - dirfd: isize, - pathname: isize, - times: isize, - flags: isize, - }, - EpollPwait { - epfd: isize, - events: isize, - maxevents: isize, - timeout: isize, - sigmask: isize, - sigsetsize: isize, - }, - Signalfd { - ufd: isize, - mask: isize, - sizemask: isize, - }, - TimerfdCreate { - clockid: isize, - flags: isize, - }, - Eventfd { - initval: isize, - }, - Fallocate { - fd: isize, - mode: isize, - offset: isize, - len: isize, - }, - TimerfdSettime { - fd: isize, - flags: isize, - new_value: isize, - old_value: isize, - }, - TimerfdGettime { - fd: isize, - curr_value: isize, - }, - Accept4 { - sockfd: isize, - addr: isize, - addrlen: isize, - flags: isize, - arg5: isize, - }, - Signalfd4 { - ufd: isize, - mask: isize, - sizemask: isize, - flags: isize, - arg5: isize, - }, - Eventfd2 { - initval: isize, - flags: isize, - }, - EpollCreate1 { - flags: isize, - }, - Dup3 { - oldfd: isize, - newfd: isize, - flags: isize, - }, - Pipe2 { - pipefd: isize, - flags: isize, - }, - InotifyInit1 { - flags: isize, - }, - Preadv { - fd: isize, - iov: isize, - iovcnt: isize, - offset: isize, - }, - Pwritev { - fd: isize, - iov: isize, - iovcnt: isize, - offset: isize, - }, - RtTgsigqueueinfo { - tgid: isize, - tid: isize, - sig: isize, - info: isize, - }, - PerfEventOpen { - attr: isize, - pid: isize, - cpu: isize, - group_fd: isize, - flags: isize, - }, - Recvmmsg { - sockfd: isize, - msgvec: isize, - vlen: isize, - flags: isize, - timeout: isize, - }, - FanotifyInit { - flags: isize, - event_f_flags: isize, - }, - FanotifyMark { - fanotify_fd: isize, - flags: isize, - mask: isize, - dirfd: isize, - pathname: isize, - }, - Prlimit64 { - pid: isize, - resource: isize, - new_limit: isize, - old_limit: isize, - }, - NameToHandleAt { - dirfd: isize, - pathname: isize, - handle: isize, - mount_id: isize, - flags: isize, - }, - OpenByHandleAt { - mountdirfd: isize, - handle: isize, - flags: isize, - }, - ClockAdjtime { - clk_id: isize, - buf: isize, - }, - Syncfs { - fd: isize, - }, - Sendmmsg { - sockfd: isize, - msgvec: isize, - vlen: isize, - flags: isize, - }, - Setns { - fd: isize, - nstype: isize, - }, - Getcpu { - cpu: isize, - node: isize, - tcache: isize, - }, - ProcessVmReadv { - pid: isize, - lvec: isize, - liovcnt: isize, - rvec: isize, - riovcnt: isize, - flags: isize, - }, - ProcessVmWritev { - pid: isize, - lvec: isize, - liovcnt: isize, - rvec: isize, - riovcnt: isize, - flags: isize, - }, - Kcmp { - pid1: isize, - pid2: isize, - type_: isize, - idx1: isize, - idx2: isize, - }, - FinitModule { - fd: isize, - param_values: isize, - flags: isize, - }, - SchedSetattr { - pid: isize, - attr: isize, - flags: isize, - }, - SchedGetattr { - pid: isize, - attr: isize, - size: isize, - flags: isize, - }, - Renameat2 { - olddirfd: isize, - oldpath: isize, - newdirfd: isize, - newpath: isize, - flags: isize, - }, - Seccomp { - operation: isize, - flags: isize, - args: isize, - }, - Getrandom { - buf: isize, - buflen: isize, - flags: isize, - }, - MemfdCreate { - name: isize, - flags: isize, - }, - KexecFileLoad { - kernel_fd: isize, - initrd_fd: isize, - cmdline_len: isize, - cmdline: isize, - flags: isize, - }, - Bpf { - cmd: isize, - attr: isize, - size: isize, - }, - Execveat { - dirfd: isize, - pathname: isize, - argv: isize, - envp: isize, - flags: isize, - }, - Userfaultfd { - flags: isize, - }, - Membarrier { - cmd: isize, - flags: isize, - }, - Mlock2 { - addr: isize, - len: isize, - flags: isize, - }, - CopyFileRange { - fd_in: isize, - off_in: isize, - fd_out: isize, - off_out: isize, - len: isize, - flags: isize, - }, - Preadv2 { - fd: isize, - iov: isize, - iovcnt: isize, - offset: isize, - flags: isize, - }, - Pwritev2 { - fd: isize, - iov: isize, - iovcnt: isize, - offset: isize, - flags: isize, - }, - PkeyMprotect { - addr: isize, - len: isize, - prot: isize, - pkey: isize, - }, - PkeyAlloc { - flags: isize, - access_rights: isize, - }, - PkeyFree { - pkey: isize, - }, -} - -impl SyscallDesc { - pub fn get_syscall_desc(syscall_num: isize, args: [isize; 6]) -> Option { - match syscall_num { - 0 => Some(SyscallDesc::Read { - fd: args[0], - buf: args[1], - count: args[2], - }), - 1 => Some(SyscallDesc::Write { - fd: args[0], - buf: args[1], - count: args[2], - }), - 2 => Some(SyscallDesc::Open { - pathname: args[0], - flags: args[1], - mode: args[2], - }), - 3 => Some(SyscallDesc::Close { fd: args[0] }), - 4 => Some(SyscallDesc::Stat { - pathname: args[0], - statbuf: args[1], - }), - 5 => Some(SyscallDesc::Fstat { - fd: args[0], - statbuf: args[1], - }), - 6 => Some(SyscallDesc::Lstat { - pathname: args[0], - statbuf: args[1], - }), - 7 => Some(SyscallDesc::Poll { - fds: args[0], - nfds: args[1], - timeout: args[2], - }), - 8 => Some(SyscallDesc::Lseek { - fd: args[0], - offset: args[1], - whence: args[2], - }), - 9 => Some(SyscallDesc::Mmap { - addr: args[0], - length: args[1], - prot: args[2], - flags: args[3], - fd: args[4], - offset: args[5], - }), - 10 => Some(SyscallDesc::Mprotect { - addr: args[0], - len: args[1], - prot: args[2], - }), - 11 => Some(SyscallDesc::Munmap { - addr: args[0], - length: args[1], - prot: args[2], - flags: args[3], - fd: args[4], - offset: args[5], - }), - 12 => Some(SyscallDesc::Brk { addr: args[0] }), - 13 => Some(SyscallDesc::RtSigaction { - sig: args[0], - act: args[1], - oldact: args[2], - }), - 14 => Some(SyscallDesc::RtSigprocmask { - how: args[0], - set: args[1], - oldset: args[2], - sigsetsize: args[3], - }), - 15 => Some(SyscallDesc::RtSigreturn), - 16 => Some(SyscallDesc::Ioctl { - fd: args[0], - cmd: args[1], - arg: args[2], - }), - 17 => Some(SyscallDesc::Pread64 { - fd: args[0], - buf: args[1], - count: args[2], - offset: args[3], - }), - 18 => Some(SyscallDesc::Pwrite64 { - fd: args[0], - buf: args[1], - count: args[2], - offset: args[3], - }), - 19 => Some(SyscallDesc::Readv { - fd: args[0], - iov: args[1], - iovcnt: args[2], - }), - 20 => Some(SyscallDesc::Writev { - fd: args[0], - iov: args[1], - iovcnt: args[2], - }), - 21 => Some(SyscallDesc::Access { - pathname: args[0], - mode: args[1], - }), - 22 => Some(SyscallDesc::Pipe { pipefd: args[0] }), - 23 => Some(SyscallDesc::Select { - nfds: args[0], - readfds: args[1], - writefds: args[2], - exceptfds: args[3], - timeout: args[4], - }), - 24 => Some(SyscallDesc::SchedYield), - 25 => Some(SyscallDesc::Mremap { - old_addr: args[0], - old_size: args[1], - new_size: args[2], - flags: args[3], - new_addr: args[4], - }), - 26 => Some(SyscallDesc::Msync { - addr: args[0], - length: args[1], - flags: args[2], - }), - 27 => Some(SyscallDesc::Mincore { - addr: args[0], - length: args[1], - vec: args[2], - }), - 28 => Some(SyscallDesc::Madvise { - addr: args[0], - length: args[1], - advice: args[2], - }), - 29 => Some(SyscallDesc::Shmget { - key: args[0], - size: args[1], - shmflg: args[2], - }), - 30 => Some(SyscallDesc::Shmat { - shmid: args[0], - shmaddr: args[1], - shmflg: args[2], - }), - 31 => Some(SyscallDesc::Shmctl { - shmid: args[0], - cmd: args[1], - buf: args[2], - }), - 32 => Some(SyscallDesc::Dup { oldfd: args[0] }), - 33 => Some(SyscallDesc::Dup2 { - oldfd: args[0], - newfd: args[1], - }), - 34 => Some(SyscallDesc::Pause), - 35 => Some(SyscallDesc::Nanosleep { - req: args[0], - rem: args[1], - }), - 36 => Some(SyscallDesc::Getitimer { - which: args[0], - curr_value: args[1], - }), - 37 => Some(SyscallDesc::Alarm { seconds: args[0] }), - 38 => Some(SyscallDesc::Setitimer { - which: args[0], - new_value: args[1], - old_value: args[2], - }), - 39 => Some(SyscallDesc::Getpid), - 40 => Some(SyscallDesc::Sendfile { - out_fd: args[0], - in_fd: args[1], - offset: args[2], - count: args[3], - }), - 41 => Some(SyscallDesc::Socket { - domain: args[0], - socket_type: args[1], - protocol: args[2], - }), - 42 => Some(SyscallDesc::Connect { - sockfd: args[0], - addr: args[1], - addrlen: args[2], - }), - 43 => Some(SyscallDesc::Accept { - sockfd: args[0], - addr: args[1], - addrlen: args[2], - }), - 44 => Some(SyscallDesc::Sendto { - sockfd: args[0], - buf: args[1], - len: args[2], - flags: args[3], - }), - 45 => Some(SyscallDesc::Recvfrom { - sockfd: args[0], - buf: args[1], - len: args[2], - flags: args[3], - src_addr: args[4], - addrlen: args[5], - }), - 46 => Some(SyscallDesc::Sendmsg { - sockfd: args[0], - msg: args[1], - flags: args[2], - }), - 47 => Some(SyscallDesc::Recvmsg { - sockfd: args[0], - msg: args[1], - flags: args[2], - }), - 48 => Some(SyscallDesc::Shutdown { - sockfd: args[0], - how: args[1], - }), - 49 => Some(SyscallDesc::Bind { - sockfd: args[0], - addr: args[1], - addrlen: args[2], - }), - 50 => Some(SyscallDesc::Listen { - sockfd: args[0], - backlog: args[1], - }), - 51 => Some(SyscallDesc::Getsockname { - sockfd: args[0], - addr: args[1], - addrlen: args[2], - }), - 52 => Some(SyscallDesc::Getpeername { - sockfd: args[0], - addr: args[1], - addrlen: args[2], - }), - 53 => Some(SyscallDesc::Socketpair { - domain: args[0], - socket_type: args[1], - protocol: args[2], - sv: args[3], - }), - 54 => Some(SyscallDesc::Setsockopt { - sockfd: args[0], - level: args[1], - optname: args[2], - optval: args[3], - optlen: args[4], - }), - 55 => Some(SyscallDesc::Getsockopt { - sockfd: args[0], - level: args[1], - optname: args[2], - optval: args[3], - optlen: args[4], - }), - 56 => Some(SyscallDesc::Clone { - flags: args[0], - stack: args[1], - parent_tid: args[2], - child_tid: args[3], - tls: args[4], - regs: args[5], - }), - 57 => Some(SyscallDesc::Fork), - 58 => Some(SyscallDesc::Vfork), - 59 => Some(SyscallDesc::Execve { - pathname: args[0], - argv: args[1], - envp: args[2], - }), - 60 => Some(SyscallDesc::Exit { status: args[0] }), - 61 => Some(SyscallDesc::Wait4 { - pid: args[0], - wstatus: args[1], - options: args[2], - rusage: args[3], - }), - 62 => Some(SyscallDesc::Kill { - pid: args[0], - sig: args[1], - }), - 63 => Some(SyscallDesc::Uname { buf: args[0] }), - 64 => Some(SyscallDesc::Semget { - key: args[0], - nsems: args[1], - semflg: args[2], - }), - 65 => Some(SyscallDesc::Semop { - semid: args[0], - sops: args[1], - nsops: args[2], - }), - 66 => Some(SyscallDesc::Semctl { - semid: args[0], - semnum: args[1], - cmd: args[2], - arg1: args[3], - arg2: args[4], - arg3: args[5], - }), - 67 => Some(SyscallDesc::Shmdt { shmaddr: args[0] }), - 68 => Some(SyscallDesc::Msgget { - key: args[0], - msgflg: args[1], - }), - 69 => Some(SyscallDesc::Msgsnd { - msqid: args[0], - msgp: args[1], - msgsz: args[2], - msgflg: args[3], - }), - 70 => Some(SyscallDesc::Msgrcv { - msqid: args[0], - msgp: args[1], - msgsz: args[2], - msgtyp: args[3], - msgflg: args[4], - }), - 71 => Some(SyscallDesc::Msgctl { - msqid: args[0], - cmd: args[1], - buf: args[2], - }), - 72 => Some(SyscallDesc::Fcntl { - fd: args[0], - cmd: args[1], - arg: args[2], - }), - 73 => Some(SyscallDesc::Flock { - fd: args[0], - operation: args[1], - }), - 74 => Some(SyscallDesc::Fsync { fd: args[0] }), - 75 => Some(SyscallDesc::Fdatasync { fd: args[0] }), - 76 => Some(SyscallDesc::Truncate { - path: args[0], - length: args[1], - }), - 77 => Some(SyscallDesc::Ftruncate { - fd: args[0], - length: args[1], - }), - 78 => Some(SyscallDesc::Getdents { - fd: args[0], - dirp: args[1], - count: args[2], - }), - 79 => Some(SyscallDesc::Getcwd { - buf: args[0], - size: args[1], - }), - 80 => Some(SyscallDesc::Chdir { path: args[0] }), - 81 => Some(SyscallDesc::Fchdir { fd: args[0] }), - 82 => Some(SyscallDesc::Rename { - oldpath: args[0], - newpath: args[1], - }), - 83 => Some(SyscallDesc::Mkdir { - pathname: args[0], - mode: args[1], - }), - 84 => Some(SyscallDesc::Rmdir { pathname: args[0] }), - 85 => Some(SyscallDesc::Creat { - pathname: args[0], - mode: args[1], - }), - 86 => Some(SyscallDesc::Link { - oldpath: args[0], - newpath: args[1], - }), - 87 => Some(SyscallDesc::Unlink { pathname: args[0] }), - 88 => Some(SyscallDesc::Symlink { - target: args[0], - linkpath: args[1], - }), - 89 => Some(SyscallDesc::Readlink { - pathname: args[0], - buf: args[1], - bufsiz: args[2], - }), - 90 => Some(SyscallDesc::Chmod { - pathname: args[0], - mode: args[1], - }), - 91 => Some(SyscallDesc::Fchmod { - fd: args[0], - mode: args[1], - }), - 92 => Some(SyscallDesc::Chown { - pathname: args[0], - owner: args[1], - group: args[2], - }), - 93 => Some(SyscallDesc::Fchown { - fd: args[0], - owner: args[1], - group: args[2], - }), - 94 => Some(SyscallDesc::Lchown { - pathname: args[0], - owner: args[1], - group: args[2], - }), - 95 => Some(SyscallDesc::Umask { mask: args[0] }), - 96 => Some(SyscallDesc::Gettimeofday { - tv: args[0], - tz: args[1], - }), - 97 => Some(SyscallDesc::Getrlimit { - resource: args[0], - rlim: args[1], - }), - 98 => Some(SyscallDesc::Getrusage { - who: args[0], - usage: args[1], - }), - 99 => Some(SyscallDesc::Sysinfo { - info: args[0], - arg2: args[1], - }), - 100 => Some(SyscallDesc::Times { buf: args[0] }), - 101 => Some(SyscallDesc::Ptrace { - request: args[0], - pid: args[1], - addr: args[2], - data: args[3], - }), - 102 => Some(SyscallDesc::Getuid), - 103 => Some(SyscallDesc::Syslog { - log_type: args[0], - bufp: args[1], - len: args[2], - }), - 104 => Some(SyscallDesc::Getgid), - 105 => Some(SyscallDesc::Setuid { uid: args[0] }), - 106 => Some(SyscallDesc::Setgid { gid: args[0] }), - 107 => Some(SyscallDesc::Geteuid), - 108 => Some(SyscallDesc::Getegid), - 109 => Some(SyscallDesc::Setpgid), - 110 => Some(SyscallDesc::Getpgrp), - 111 => Some(SyscallDesc::Setsid), - 112 => Some(SyscallDesc::Setreuid { - ruid: args[0], - euid: args[1], - }), - 113 => Some(SyscallDesc::Setregid { - rgid: args[0], - egid: args[1], - }), - 114 => Some(SyscallDesc::Getgroups { - size: args[0], - list: args[1], - }), - 115 => Some(SyscallDesc::Setgroups { - size: args[0], - list: args[1], - }), - 116 => Some(SyscallDesc::Setresuid { - ruid: args[0], - euid: args[1], - suid: args[2], - }), - 117 => Some(SyscallDesc::Getresuid { - ruid: args[0], - euid: args[1], - suid: args[2], - }), - 118 => Some(SyscallDesc::Setresgid { - rgid: args[0], - egid: args[1], - sgid: args[2], - }), - 119 => Some(SyscallDesc::Getresgid { - rgid: args[0], - egid: args[1], - sgid: args[2], - }), - 120 => Some(SyscallDesc::Getpgid { pid: args[0] }), - 121 => Some(SyscallDesc::Setfsuid { fsuid: args[0] }), - 122 => Some(SyscallDesc::Setfsgid { fsgid: args[0] }), - 123 => Some(SyscallDesc::Getsid { pid: args[0] }), - 124 => Some(SyscallDesc::Capget { - hdrp: args[0], - datap: args[1], - }), - 125 => Some(SyscallDesc::Capset { - hdrp: args[0], - datap: args[1], - }), - 126 => Some(SyscallDesc::RtSigpending { set: args[0] }), - 127 => Some(SyscallDesc::RtSigtimedwait { - set: args[0], - info: args[1], - timeout: args[2], - sigsetsize: args[3], - }), - 128 => Some(SyscallDesc::RtSigqueueinfo { - pid: args[0], - sig: args[1], - info: args[2], - }), - 129 => Some(SyscallDesc::RtSigsuspend { - mask: args[0], - sigsetsize: args[1], - }), - 130 => Some(SyscallDesc::Sigaltstack { - ss: args[0], - old_ss: args[1], - }), - 131 => Some(SyscallDesc::Utime { - filename: args[0], - times: args[1], - }), - 132 => Some(SyscallDesc::Mknod { - pathname: args[0], - mode: args[1], - dev: args[2], - }), - 133 => Some(SyscallDesc::Uselib { library: args[0] }), - 134 => Some(SyscallDesc::Personality { persona: args[0] }), - 135 => Some(SyscallDesc::Ustat { - dev: args[0], - ubuf: args[1], - }), - 136 => Some(SyscallDesc::Statfs { - path: args[0], - buf: args[1], - }), - 137 => Some(SyscallDesc::Fstatfs { - fd: args[0], - buf: args[1], - }), - 138 => Some(SyscallDesc::Sysfs { - option: args[0], - arg2: args[1], - arg3: args[2], - }), - 139 => Some(SyscallDesc::Getpriority { - which: args[0], - who: args[1], - }), - 140 => Some(SyscallDesc::Setpriority { - which: args[0], - who: args[1], - prio: args[2], - }), - 141 => Some(SyscallDesc::SchedSetparam { - pid: args[0], - param: args[1], - }), - 142 => Some(SyscallDesc::SchedGetparam { - pid: args[0], - param: args[1], - }), - 143 => Some(SyscallDesc::SchedSetscheduler { - pid: args[0], - policy: args[1], - param: args[2], - }), - 144 => Some(SyscallDesc::SchedGetscheduler { pid: args[0] }), - 145 => Some(SyscallDesc::SchedGetPriorityMax { policy: args[0] }), - 146 => Some(SyscallDesc::SchedGetPriorityMin { policy: args[0] }), - 147 => Some(SyscallDesc::SchedRrGetInterval { - pid: args[0], - interval: args[1], - }), - 148 => Some(SyscallDesc::Mlock { - addr: args[0], - len: args[1], - }), - 149 => Some(SyscallDesc::Munlock { - addr: args[0], - len: args[1], - }), - 150 => Some(SyscallDesc::Mlockall { flags: args[0] }), - 151 => Some(SyscallDesc::Munlockall), - 152 => Some(SyscallDesc::Vhangup), - 153 => Some(SyscallDesc::ModifyLdt { - func: args[0], - ptr: args[1], - bytecount: args[2], - }), - 154 => Some(SyscallDesc::PivotRoot { - new_root: args[0], - old_root: args[1], - }), - 155 => Some(SyscallDesc::Sysctl { args: args[0] }), - 156 => Some(SyscallDesc::Prctl { - option: args[0], - arg2: args[1], - arg3: args[2], - arg4: args[3], - arg5: args[4], - }), - 157 => Some(SyscallDesc::ArchPrctl { - code: args[0], - addr: args[1], - arg3: args[2], - }), - 158 => Some(SyscallDesc::Adjtimex { buf: args[0] }), - 159 => Some(SyscallDesc::Setrlimit { - resource: args[0], - rlim: args[1], - }), - 160 => Some(SyscallDesc::Chroot { path: args[0] }), - 161 => Some(SyscallDesc::Sync), - 162 => Some(SyscallDesc::Acct { filename: args[0] }), - 163 => Some(SyscallDesc::Settimeofday { - tv: args[0], - tz: args[1], - }), - 164 => Some(SyscallDesc::Mount { - source: args[0], - target: args[1], - filesystemtype: args[2], - mountflags: args[3], - data: args[4], - }), - 165 => Some(SyscallDesc::Umount2 { - target: args[0], - flags: args[1], - }), - 166 => Some(SyscallDesc::Swapon { - path: args[0], - swapflags: args[1], - }), - 167 => Some(SyscallDesc::Swapoff { path: args[0] }), - 168 => Some(SyscallDesc::Reboot { - magic: args[0], - magic2: args[1], - cmd: args[2], - arg: args[3], - }), - 169 => Some(SyscallDesc::Sethostname { - name: args[0], - len: args[1], - }), - 170 => Some(SyscallDesc::Setdomainname { - name: args[0], - len: args[1], - }), - 171 => Some(SyscallDesc::Iopl { level: args[0] }), - 172 => Some(SyscallDesc::Ioperm { - from: args[0], - num: args[1], - turn_on: args[2], - }), - 186 => Some(SyscallDesc::Gettid), - 187 => Some(SyscallDesc::Readahead { - fd: args[0], - offset: args[1], - count: args[2], - }), - 188 => Some(SyscallDesc::Setxattr { - path: args[0], - name: args[1], - value: args[2], - size: args[3], - flags: args[4], - }), - 189 => Some(SyscallDesc::Lsetxattr { - path: args[0], - name: args[1], - value: args[2], - size: args[3], - flags: args[4], - }), - 190 => Some(SyscallDesc::Fsetxattr { - fd: args[0], - name: args[1], - value: args[2], - size: args[3], - flags: args[4], - }), - 191 => Some(SyscallDesc::Getxattr { - path: args[0], - name: args[1], - value: args[2], - size: args[3], - }), - 192 => Some(SyscallDesc::Lgetxattr { - path: args[0], - name: args[1], - value: args[2], - size: args[3], - }), - 193 => Some(SyscallDesc::Fgetxattr { - fd: args[0], - name: args[1], - value: args[2], - size: args[3], - }), - 194 => Some(SyscallDesc::Listxattr { - path: args[0], - list: args[1], - size: args[2], - }), - 195 => Some(SyscallDesc::Llistxattr { - path: args[0], - list: args[1], - size: args[2], - }), - 196 => Some(SyscallDesc::Flistxattr { - path: args[0], - list: args[1], - size: args[2], - }), - 197 => Some(SyscallDesc::Removexattr { - path: args[0], - name: args[1], - }), - 198 => Some(SyscallDesc::Lremovexattr { - path: args[0], - name: args[1], - }), - 199 => Some(SyscallDesc::Fremovexattr { - fd: args[0], - name: args[1], - }), - 200 => Some(SyscallDesc::Tkill { - tid: args[0], - sig: args[1], - }), - 201 => Some(SyscallDesc::Time { tloc: args[0] }), - 202 => Some(SyscallDesc::Futex { - uaddr: args[0], - futex_op: args[1], - val: args[2], - timeout: args[3], - uaddr2: args[4], - val3: args[5], - }), - 203 => Some(SyscallDesc::SchedSetaffinity { - pid: args[0], - cpusetsize: args[1], - mask: args[2], - }), - 204 => Some(SyscallDesc::SchedGetaffinity { - pid: args[0], - cpusetsize: args[1], - mask: args[2], - }), - 205 => Some(SyscallDesc::SetThreadArea { u_info: args[0] }), - 206 => Some(SyscallDesc::IoSetup { - nr_events: args[0], - ctx_idp: args[1], - }), - 207 => Some(SyscallDesc::IoDestroy { ctx_id: args[0] }), - 208 => Some(SyscallDesc::IoGetevents { - ctx_id: args[0], - min_nr: args[1], - nr: args[2], - events: args[3], - timeout: args[4], - }), - 209 => Some(SyscallDesc::IoSubmit { - ctx_id: args[0], - nr: args[1], - iocbpp: args[2], - }), - 210 => Some(SyscallDesc::IoCancel { - ctx_id: args[0], - iocb: args[1], - result: args[2], - }), - 211 => Some(SyscallDesc::GetThreadArea { u_info: args[0] }), - 212 => Some(SyscallDesc::LookupDcookie { - cookie: args[0], - buffer: args[1], - len: args[2], - }), - 213 => Some(SyscallDesc::EpollCreate { size: args[0] }), - 217 => Some(SyscallDesc::Getdents64 { - fd: args[0], - dirp: args[1], - count: args[2], - }), - 218 => Some(SyscallDesc::SetTidAddress { tidptr: args[0] }), - 220 => Some(SyscallDesc::Semtimedop { - semid: args[0], - sops: args[1], - nsops: args[2], - timeout: args[3], - }), - 221 => Some(SyscallDesc::Fadvise64 { - fd: args[0], - offset: args[1], - len: args[2], - advice: args[3], - }), - 222 => Some(SyscallDesc::TimerCreate { - clockid: args[0], - sevp: args[1], - timerid: args[2], - }), - 223 => Some(SyscallDesc::TimerSettime { - timerid: args[0], - flags: args[1], - new_value: args[2], - old_value: args[3], - }), - 224 => Some(SyscallDesc::TimerGettime { - timerid: args[0], - curr_value: args[1], - }), - 225 => Some(SyscallDesc::TimerGetoverrun { timerid: args[0] }), - 226 => Some(SyscallDesc::TimerDelete { timerid: args[0] }), - 227 => Some(SyscallDesc::ClockSettime { - clockid: args[0], - tp: args[1], - }), - 228 => Some(SyscallDesc::ClockGettime { - clockid: args[0], - tp: args[1], - }), - 229 => Some(SyscallDesc::ClockGetres { - clockid: args[0], - res: args[1], - }), - 230 => Some(SyscallDesc::ClockNanosleep { - clockid: args[0], - flags: args[1], - request: args[2], - remain: args[3], - }), - 231 => Some(SyscallDesc::ExitGroup { status: args[0] }), - 232 => Some(SyscallDesc::EpollWait { - epfd: args[0], - events: args[1], - maxevents: args[2], - timeout: args[3], - }), - 233 => Some(SyscallDesc::EpollCtl { - epfd: args[0], - op: args[1], - fd: args[2], - event: args[3], - }), - 234 => Some(SyscallDesc::Tgkill { - tgid: args[0], - tid: args[1], - sig: args[2], - }), - 235 => Some(SyscallDesc::Utimes { - filename: args[0], - times: args[1], - }), - 237 => Some(SyscallDesc::Mbind { - addr: args[0], - len: args[1], - mode: args[2], - nodemask: args[3], - maxnode: args[4], - }), - 238 => Some(SyscallDesc::SetMempolicy { - mode: args[0], - nodemask: args[1], - maxnode: args[2], - }), - 239 => Some(SyscallDesc::GetMempolicy { - mode: args[0], - nodemask: args[1], - maxnode: args[2], - addr: args[3], - flags: args[4], - }), - 240 => Some(SyscallDesc::MqOpen { - name: args[0], - oflag: args[1], - mode: args[2], - attr: args[3], - arg5: args[4], - }), - 241 => Some(SyscallDesc::MqUnlink { name: args[0] }), - 242 => Some(SyscallDesc::MqTimedsend { - mqdes: args[0], - msg_ptr: args[1], - msg_len: args[2], - msg_prio: args[3], - abs_timeout: args[4], - }), - 243 => Some(SyscallDesc::MqTimedreceive { - mqdes: args[0], - msg_ptr: args[1], - msg_len: args[2], - msg_prio: args[3], - abs_timeout: args[4], - }), - 244 => Some(SyscallDesc::MqNotify { - mqdes: args[0], - sevp: args[1], - }), - 245 => Some(SyscallDesc::MqGetsetattr { - mqdes: args[0], - newattr: args[1], - oldattr: args[2], - }), - 246 => Some(SyscallDesc::KexecLoad { - entry: args[0], - nr_segments: args[1], - segments: args[2], - flags: args[3], - }), - 247 => Some(SyscallDesc::Waitid { - idtype: args[0], - id: args[1], - infop: args[2], - options: args[3], - }), - 248 => Some(SyscallDesc::AddKey { - key_type: args[0], - description: args[1], - payload: args[2], - plen: args[3], - keyring: args[4], - }), - 249 => Some(SyscallDesc::RequestKey { - key_type: args[0], - description: args[1], - callout_info: args[2], - dest_keyring: args[3], - }), - 250 => Some(SyscallDesc::Keyctl { - operation: args[0], - arg2: args[1], - arg3: args[2], - arg4: args[3], - arg5: args[4], - }), - 251 => Some(SyscallDesc::IoprioSet { - which: args[0], - who: args[1], - ioprio: args[2], - }), - 252 => Some(SyscallDesc::IoprioGet { - which: args[0], - who: args[1], - }), - 253 => Some(SyscallDesc::InotifyInit), - 254 => Some(SyscallDesc::InotifyAddWatch { - fd: args[0], - pathname: args[1], - mask: args[2], - }), - 255 => Some(SyscallDesc::InotifyRmWatch { - fd: args[0], - wd: args[1], - }), - 256 => Some(SyscallDesc::MigratePages { - pid: args[0], - maxnode: args[1], - old_nodes: args[2], - new_nodes: args[3], - }), - 257 => Some(SyscallDesc::Openat { - dirfd: args[0], - pathname: args[1], - flags: args[2], - mode: args[3], - }), - 258 => Some(SyscallDesc::Mkdirat { - dirfd: args[0], - pathname: args[1], - mode: args[2], - }), - 259 => Some(SyscallDesc::Mknodat { - dirfd: args[0], - pathname: args[1], - mode: args[2], - dev: args[3], - }), - 260 => Some(SyscallDesc::Fchownat { - dirfd: args[0], - pathname: args[1], - owner: args[2], - group: args[3], - flags: args[4], - }), - 261 => Some(SyscallDesc::Futimesat { - dirfd: args[0], - pathname: args[1], - times: args[2], - }), - 262 => Some(SyscallDesc::Newfstatat { - dirfd: args[0], - pathname: args[1], - statbuf: args[2], - flags: args[3], - }), - 263 => Some(SyscallDesc::Unlinkat { - dirfd: args[0], - pathname: args[1], - flags: args[2], - }), - 264 => Some(SyscallDesc::Renameat { - olddirfd: args[0], - oldpath: args[1], - newdirfd: args[2], - newpath: args[3], - }), - 265 => Some(SyscallDesc::Linkat { - olddirfd: args[0], - oldpath: args[1], - newdirfd: args[2], - newpath: args[3], - flags: args[4], - }), - 266 => Some(SyscallDesc::Symlinkat { - olddirfd: args[0], - oldpath: args[1], - newpath: args[2], - }), - 267 => Some(SyscallDesc::Readlinkat { - dirfd: args[0], - pathname: args[1], - buf: args[2], - bufsiz: args[3], - }), - 268 => Some(SyscallDesc::Fchmodat { - dirfd: args[0], - pathname: args[1], - mode: args[2], - }), - 269 => Some(SyscallDesc::Faccessat { - dirfd: args[0], - pathname: args[1], - mode: args[2], - }), - 270 => Some(SyscallDesc::Pselect6 { - nfds: args[0], - readfds: args[1], - writefds: args[2], - exceptfds: args[3], - timeout: args[4], - sigmask: args[5], - }), - 271 => Some(SyscallDesc::Ppoll { - fds: args[0], - nfds: args[1], - tmo_p: args[2], - sigmask: args[3], - sigsetsize: args[4], - }), - 272 => Some(SyscallDesc::Unshare { flags: args[0] }), - 273 => Some(SyscallDesc::SetRobustList { - head: args[0], - len: args[1], - }), - 274 => Some(SyscallDesc::GetRobustList { - pid: args[0], - head_ptr: args[1], - len_ptr: args[2], - }), - 275 => Some(SyscallDesc::Splice { - fd_in: args[0], - off_in: args[1], - fd_out: args[2], - off_out: args[3], - len: args[4], - flags: args[5], - }), - 276 => Some(SyscallDesc::Tee { - fd_in: args[0], - fd_out: args[1], - len: args[2], - flags: args[3], - }), - 277 => Some(SyscallDesc::SyncFileRange { - fd: args[0], - offset: args[1], - nbytes: args[2], - flags: args[3], - }), - 278 => Some(SyscallDesc::Vmsplice { - fd: args[0], - iov: args[1], - nr_segs: args[2], - flags: args[3], - }), - 279 => Some(SyscallDesc::MovePages { - pid: args[0], - count: args[1], - pages: args[2], - nodes: args[3], - status: args[4], - flags: args[5], - }), - 280 => Some(SyscallDesc::Utimensat { - dirfd: args[0], - pathname: args[1], - times: args[2], - flags: args[3], - }), - 281 => Some(SyscallDesc::EpollPwait { - epfd: args[0], - events: args[1], - maxevents: args[2], - timeout: args[3], - sigmask: args[4], - sigsetsize: args[5], - }), - 282 => Some(SyscallDesc::Signalfd { - ufd: args[0], - mask: args[1], - sizemask: args[2], - }), - 283 => Some(SyscallDesc::TimerfdCreate { - clockid: args[0], - flags: args[1], - }), - 284 => Some(SyscallDesc::Eventfd { initval: args[0] }), - 285 => Some(SyscallDesc::Fallocate { - fd: args[0], - mode: args[1], - offset: args[2], - len: args[3], - }), - 286 => Some(SyscallDesc::TimerfdSettime { - fd: args[0], - flags: args[1], - new_value: args[2], - old_value: args[3], - }), - 287 => Some(SyscallDesc::TimerfdGettime { - fd: args[0], - curr_value: args[1], - }), - 288 => Some(SyscallDesc::Accept4 { - sockfd: args[0], - addr: args[1], - addrlen: args[2], - flags: args[3], - arg5: args[4], - }), - 289 => Some(SyscallDesc::Signalfd4 { - ufd: args[0], - mask: args[1], - sizemask: args[2], - flags: args[3], - arg5: args[4], - }), - 290 => Some(SyscallDesc::Eventfd2 { - initval: args[0], - flags: args[1], - }), - 291 => Some(SyscallDesc::EpollCreate1 { flags: args[0] }), - 292 => Some(SyscallDesc::Dup3 { - oldfd: args[0], - newfd: args[1], - flags: args[2], - }), - 293 => Some(SyscallDesc::Pipe2 { - pipefd: args[0], - flags: args[1], - }), - 294 => Some(SyscallDesc::InotifyInit1 { flags: args[0] }), - 295 => Some(SyscallDesc::Preadv { - fd: args[0], - iov: args[1], - iovcnt: args[2], - offset: args[3], - }), - 296 => Some(SyscallDesc::Pwritev { - fd: args[0], - iov: args[1], - iovcnt: args[2], - offset: args[3], - }), - 297 => Some(SyscallDesc::RtTgsigqueueinfo { - tgid: args[0], - tid: args[1], - sig: args[2], - info: args[3], - }), - 298 => Some(SyscallDesc::PerfEventOpen { - attr: args[0], - pid: args[1], - cpu: args[2], - group_fd: args[3], - flags: args[4], - }), - 299 => Some(SyscallDesc::Recvmmsg { - sockfd: args[0], - msgvec: args[1], - vlen: args[2], - flags: args[3], - timeout: args[4], - }), - 300 => Some(SyscallDesc::FanotifyInit { - flags: args[0], - event_f_flags: args[1], - }), - 301 => Some(SyscallDesc::FanotifyMark { - fanotify_fd: args[0], - flags: args[1], - mask: args[2], - dirfd: args[3], - pathname: args[4], - }), - 302 => Some(SyscallDesc::Prlimit64 { - pid: args[0], - resource: args[1], - new_limit: args[2], - old_limit: args[3], - }), - 303 => Some(SyscallDesc::NameToHandleAt { - dirfd: args[0], - pathname: args[1], - handle: args[2], - mount_id: args[3], - flags: args[4], - }), - 304 => Some(SyscallDesc::OpenByHandleAt { - mountdirfd: args[0], - handle: args[1], - flags: args[2], - }), - 305 => Some(SyscallDesc::ClockAdjtime { - clk_id: args[0], - buf: args[1], - }), - 306 => Some(SyscallDesc::Syncfs { fd: args[0] }), - 307 => Some(SyscallDesc::Sendmmsg { - sockfd: args[0], - msgvec: args[1], - vlen: args[2], - flags: args[3], - }), - 308 => Some(SyscallDesc::Setns { - fd: args[0], - nstype: args[1], - }), - 309 => Some(SyscallDesc::Getcpu { - cpu: args[0], - node: args[1], - tcache: args[2], - }), - 310 => Some(SyscallDesc::ProcessVmReadv { - pid: args[0], - lvec: args[1], - liovcnt: args[2], - rvec: args[3], - riovcnt: args[4], - flags: args[5], - }), - 311 => Some(SyscallDesc::ProcessVmWritev { - pid: args[0], - lvec: args[1], - liovcnt: args[2], - rvec: args[3], - riovcnt: args[4], - flags: args[5], - }), - 312 => Some(SyscallDesc::Kcmp { - pid1: args[0], - pid2: args[1], - type_: args[2], - idx1: args[3], - idx2: args[4], - }), - 313 => Some(SyscallDesc::FinitModule { - fd: args[0], - param_values: args[1], - flags: args[2], - }), - 314 => Some(SyscallDesc::SchedSetattr { - pid: args[0], - attr: args[1], - flags: args[2], - }), - 315 => Some(SyscallDesc::SchedGetattr { - pid: args[0], - attr: args[1], - size: args[2], - flags: args[3], - }), - 316 => Some(SyscallDesc::Renameat2 { - olddirfd: args[0], - oldpath: args[1], - newdirfd: args[2], - newpath: args[3], - flags: args[4], - }), - 317 => Some(SyscallDesc::Seccomp { - operation: args[0], - flags: args[1], - args: args[2], - }), - 318 => Some(SyscallDesc::Getrandom { - buf: args[0], - buflen: args[1], - flags: args[2], - }), - 319 => Some(SyscallDesc::MemfdCreate { - name: args[0], - flags: args[1], - }), - 320 => Some(SyscallDesc::KexecFileLoad { - kernel_fd: args[0], - initrd_fd: args[1], - cmdline_len: args[2], - cmdline: args[3], - flags: args[4], - }), - 321 => Some(SyscallDesc::Bpf { - cmd: args[0], - attr: args[1], - size: args[2], - }), - 322 => Some(SyscallDesc::Execveat { - dirfd: args[0], - pathname: args[1], - argv: args[2], - envp: args[3], - flags: args[4], - }), - 323 => Some(SyscallDesc::Userfaultfd { flags: args[0] }), - 324 => Some(SyscallDesc::Membarrier { - cmd: args[0], - flags: args[1], - }), - 325 => Some(SyscallDesc::Mlock2 { - addr: args[0], - len: args[1], - flags: args[2], - }), - 326 => Some(SyscallDesc::CopyFileRange { - fd_in: args[0], - off_in: args[1], - fd_out: args[2], - off_out: args[3], - len: args[4], - flags: args[5], - }), - 327 => Some(SyscallDesc::Preadv2 { - fd: args[0], - iov: args[1], - iovcnt: args[2], - offset: args[3], - flags: args[4], - }), - 328 => Some(SyscallDesc::Pwritev2 { - fd: args[0], - iov: args[1], - iovcnt: args[2], - offset: args[3], - flags: args[4], - }), - 329 => Some(SyscallDesc::PkeyMprotect { - addr: args[0], - len: args[1], - prot: args[2], - pkey: args[3], - }), - 330 => Some(SyscallDesc::PkeyAlloc { - flags: args[0], - access_rights: args[1], - }), - 331 => Some(SyscallDesc::PkeyFree { pkey: args[0] }), - _ => None, - } - } -} - -pub fn get_syscall_desc(syscall_num: isize, args: [isize; 6]) -> Option { - if syscall_num < 0 { - return None; - } - - return SyscallDesc::get_syscall_desc(syscall_num, args); -} diff --git a/syscall_lib/Cargo.toml b/syscall_lib/Cargo.toml new file mode 100644 index 0000000..e950c4a --- /dev/null +++ b/syscall_lib/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "syscall_lib" +version = "0.1.0" +edition = "2024" + +[dependencies] +bincode = "2.0.1" diff --git a/syscall_lib/src/create_syscall.rs b/syscall_lib/src/create_syscall.rs new file mode 100644 index 0000000..4a0bcaf --- /dev/null +++ b/syscall_lib/src/create_syscall.rs @@ -0,0 +1,402 @@ +use crate::{Syscall, Sysno}; + +/// Creates a `Syscall` enum from a system call number and an array of arguments. +/// +/// This function matches the provided `syscall_num` to a `Sysno` variant +/// and constructs the corresponding `Syscall` enum variant with the arguments. +/// If the system call number is unknown, it returns a `Syscall::Unknown` variant. +/// +/// # Arguments +/// +/// * `syscall_num`: The system call number as an `isize`. +/// * `args`: An array of six `isize` values representing the system call's arguments. +/// +/// # Returns +/// +/// A `Syscall` enum variant. +pub fn create_syscall(syscall_num: usize, args: [usize; 6]) -> Syscall { + let (arg0, arg1, arg2, arg3, arg4, arg5) = + (args[0], args[1], args[2], args[3], args[4], args[5]); + + // We can't simply match on the `isize` because of the non-contiguous + // syscall numbers, like `pidfd_send_signal`. A simple `match` statement + // requires all variants to be handled, and this is a lot of code. + // Instead we can use a `match` on the `Sysno` enum, which is more + // exhaustive and less error-prone. + match unsafe { std::mem::transmute::(syscall_num as i32) } { + Sysno::read => Syscall::Read(arg0, arg1, arg2), + Sysno::write => Syscall::Write(arg0, arg1, arg2), + Sysno::open => Syscall::Open(arg0, arg1, arg2), + Sysno::close => Syscall::Close(arg0), + Sysno::stat => Syscall::Stat(arg0, arg1), + Sysno::fstat => Syscall::Fstat(arg0, arg1), + Sysno::lstat => Syscall::Lstat(arg0, arg1), + Sysno::poll => Syscall::Poll(arg0, arg1, arg2), + Sysno::lseek => Syscall::Lseek(arg0, arg1, arg2), + Sysno::mmap => Syscall::Mmap(arg0, arg1, arg2, arg3, arg4, arg5), + Sysno::mprotect => Syscall::Mprotect(arg0, arg1, arg2), + Sysno::munmap => Syscall::Munmap(arg0, arg1), + Sysno::brk => Syscall::Brk(arg0), + Sysno::rt_sigaction => Syscall::RtSigaction(arg0, arg1, arg2, arg3), + Sysno::rt_sigprocmask => Syscall::RtSigprocmask(arg0, arg1, arg2, arg3), + Sysno::rt_sigreturn => Syscall::RtSigreturn, + Sysno::ioctl => Syscall::Ioctl(arg0, arg1, arg2), + Sysno::pread64 => Syscall::Pread64(arg0, arg1, arg2, arg3), + Sysno::pwrite64 => Syscall::Pwrite64(arg0, arg1, arg2, arg3), + Sysno::readv => Syscall::Readv(arg0, arg1, arg2), + Sysno::writev => Syscall::Writev(arg0, arg1, arg2), + Sysno::access => Syscall::Access(arg0, arg1), + Sysno::pipe => Syscall::Pipe(arg0), + Sysno::select => Syscall::Select(arg0, arg1, arg2, arg3, arg4), + Sysno::sched_yield => Syscall::SchedYield, + Sysno::mremap => Syscall::Mremap(arg0, arg1, arg2, arg3, arg4), + Sysno::msync => Syscall::Msync(arg0, arg1, arg2), + Sysno::mincore => Syscall::Mincore(arg0, arg1, arg2), + Sysno::madvise => Syscall::Madvise(arg0, arg1, arg2), + Sysno::shmget => Syscall::Shmget(arg0, arg1, arg2), + Sysno::shmat => Syscall::Shmat(arg0, arg1, arg2), + Sysno::shmctl => Syscall::Shmctl(arg0, arg1, arg2), + Sysno::dup => Syscall::Dup(arg0), + Sysno::dup2 => Syscall::Dup2(arg0, arg1), + Sysno::pause => Syscall::Pause, + Sysno::nanosleep => Syscall::Nanosleep(arg0, arg1), + Sysno::getitimer => Syscall::Getitimer(arg0, arg1), + Sysno::alarm => Syscall::Alarm(arg0), + Sysno::setitimer => Syscall::Setitimer(arg0, arg1, arg2), + Sysno::getpid => Syscall::Getpid, + Sysno::sendfile => Syscall::Sendfile(arg0, arg1, arg2, arg3), + Sysno::socket => Syscall::Socket(arg0, arg1, arg2), + Sysno::connect => Syscall::Connect(arg0, arg1, arg2), + Sysno::accept => Syscall::Accept(arg0, arg1, arg2), + Sysno::sendto => Syscall::Sendto(arg0, arg1, arg2, arg3, arg4, arg5), + Sysno::recvfrom => Syscall::Recvfrom(arg0, arg1, arg2, arg3, arg4, arg5), + Sysno::sendmsg => Syscall::Sendmsg(arg0, arg1, arg2), + Sysno::recvmsg => Syscall::Recvmsg(arg0, arg1, arg2), + Sysno::shutdown => Syscall::Shutdown(arg0, arg1), + Sysno::bind => Syscall::Bind(arg0, arg1, arg2), + Sysno::listen => Syscall::Listen(arg0, arg1), + Sysno::getsockname => Syscall::Getsockname(arg0, arg1, arg2), + Sysno::getpeername => Syscall::Getpeername(arg0, arg1, arg2), + Sysno::socketpair => Syscall::Socketpair(arg0, arg1, arg2, arg3), + Sysno::setsockopt => Syscall::Setsockopt(arg0, arg1, arg2, arg3, arg4), + Sysno::getsockopt => Syscall::Getsockopt(arg0, arg1, arg2, arg3, arg4), + Sysno::clone => Syscall::Clone(arg0, arg1, arg2, arg3, arg4), + Sysno::fork => Syscall::Fork, + Sysno::vfork => Syscall::Vfork, + Sysno::execve => Syscall::Execve(arg0, arg1, arg2), + Sysno::exit => Syscall::Exit(arg0), + Sysno::wait4 => Syscall::Wait4(arg0, arg1, arg2, arg3), + Sysno::kill => Syscall::Kill(arg0, arg1), + Sysno::uname => Syscall::Uname(arg0), + Sysno::semget => Syscall::Semget(arg0, arg1, arg2), + Sysno::semop => Syscall::Semop(arg0, arg1, arg2), + Sysno::semctl => Syscall::Semctl(arg0, arg1, arg2, arg3), + Sysno::shmdt => Syscall::Shmdt(arg0), + Sysno::msgget => Syscall::Msgget(arg0, arg1), + Sysno::msgsnd => Syscall::Msgsnd(arg0, arg1, arg2, arg3), + Sysno::msgrcv => Syscall::Msgrcv(arg0, arg1, arg2, arg3, arg4), + Sysno::msgctl => Syscall::Msgctl(arg0, arg1, arg2), + Sysno::fcntl => Syscall::Fcntl(arg0, arg1, arg2), + Sysno::flock => Syscall::Flock(arg0, arg1), + Sysno::fsync => Syscall::Fsync(arg0), + Sysno::fdatasync => Syscall::Fdatasync(arg0), + Sysno::truncate => Syscall::Truncate(arg0, arg1), + Sysno::ftruncate => Syscall::Ftruncate(arg0, arg1), + Sysno::getdents => Syscall::Getdents(arg0, arg1, arg2), + Sysno::getcwd => Syscall::Getcwd(arg0, arg1), + Sysno::chdir => Syscall::Chdir(arg0), + Sysno::fchdir => Syscall::Fchdir(arg0), + Sysno::rename => Syscall::Rename(arg0, arg1), + Sysno::mkdir => Syscall::Mkdir(arg0, arg1), + Sysno::rmdir => Syscall::Rmdir(arg0), + Sysno::creat => Syscall::Creat(arg0, arg1), + Sysno::link => Syscall::Link(arg0, arg1), + Sysno::unlink => Syscall::Unlink(arg0), + Sysno::symlink => Syscall::Symlink(arg0, arg1), + Sysno::readlink => Syscall::Readlink(arg0, arg1, arg2), + Sysno::chmod => Syscall::Chmod(arg0, arg1), + Sysno::fchmod => Syscall::Fchmod(arg0, arg1), + Sysno::chown => Syscall::Chown(arg0, arg1, arg2), + Sysno::fchown => Syscall::Fchown(arg0, arg1, arg2), + Sysno::lchown => Syscall::Lchown(arg0, arg1, arg2), + Sysno::umask => Syscall::Umask(arg0), + Sysno::gettimeofday => Syscall::Gettimeofday(arg0, arg1), + Sysno::getrlimit => Syscall::Getrlimit(arg0, arg1), + Sysno::getrusage => Syscall::Getrusage(arg0, arg1), + Sysno::sysinfo => Syscall::Sysinfo(arg0), + Sysno::times => Syscall::Times(arg0), + Sysno::ptrace => Syscall::Ptrace(arg0, arg1, arg2, arg3), + Sysno::getuid => Syscall::Getuid, + Sysno::syslog => Syscall::Syslog(arg0, arg1, arg2), + Sysno::getgid => Syscall::Getgid, + Sysno::setuid => Syscall::Setuid(arg0), + Sysno::setgid => Syscall::Setgid(arg0), + Sysno::geteuid => Syscall::Geteuid, + Sysno::getegid => Syscall::Getegid, + Sysno::setpgid => Syscall::Setpgid(arg0, arg1), + Sysno::getppid => Syscall::Getppid, + Sysno::getpgrp => Syscall::Getpgrp, + Sysno::setsid => Syscall::Setsid, + Sysno::setreuid => Syscall::Setreuid(arg0, arg1), + Sysno::setregid => Syscall::Setregid(arg0, arg1), + Sysno::getgroups => Syscall::Getgroups(arg0, arg1), + Sysno::setgroups => Syscall::Setgroups(arg0, arg1), + Sysno::setresuid => Syscall::Setresuid(arg0, arg1, arg2), + Sysno::getresuid => Syscall::Getresuid(arg0, arg1, arg2), + Sysno::setresgid => Syscall::Setresgid(arg0, arg1, arg2), + Sysno::getresgid => Syscall::Getresgid(arg0, arg1, arg2), + Sysno::getpgid => Syscall::Getpgid(arg0), + Sysno::setfsuid => Syscall::Setfsuid(arg0), + Sysno::setfsgid => Syscall::Setfsgid(arg0), + Sysno::getsid => Syscall::Getsid(arg0), + Sysno::capget => Syscall::Capget(arg0, arg1), + Sysno::capset => Syscall::Capset(arg0, arg1), + Sysno::rt_sigpending => Syscall::RtSigpending(arg0, arg1), + Sysno::rt_sigtimedwait => Syscall::RtSigtimedwait(arg0, arg1, arg2, arg3), + Sysno::rt_sigqueueinfo => Syscall::RtSigqueueinfo(arg0, arg1, arg2), + Sysno::rt_sigsuspend => Syscall::RtSigsuspend(arg0, arg1), + Sysno::sigaltstack => Syscall::Sigaltstack(arg0, arg1), + Sysno::utime => Syscall::Utime(arg0, arg1), + Sysno::mknod => Syscall::Mknod(arg0, arg1, arg2), + Sysno::uselib => Syscall::Uselib(arg0), + Sysno::personality => Syscall::Personality(arg0), + Sysno::ustat => Syscall::Ustat(arg0, arg1), + Sysno::statfs => Syscall::Statfs(arg0, arg1), + Sysno::fstatfs => Syscall::Fstatfs(arg0, arg1), + Sysno::sysfs => Syscall::Sysfs(arg0, arg1, arg2), + Sysno::getpriority => Syscall::Getpriority(arg0, arg1), + Sysno::setpriority => Syscall::Setpriority(arg0, arg1, arg2), + Sysno::sched_setparam => Syscall::SchedSetparam(arg0, arg1), + Sysno::sched_getparam => Syscall::SchedGetparam(arg0, arg1), + Sysno::sched_setscheduler => Syscall::SchedSetscheduler(arg0, arg1, arg2), + Sysno::sched_getscheduler => Syscall::SchedGetscheduler(arg0), + Sysno::sched_get_priority_max => Syscall::SchedGetPriorityMax(arg0), + Sysno::sched_get_priority_min => Syscall::SchedGetPriorityMin(arg0), + Sysno::sched_rr_get_interval => Syscall::SchedRrGetInterval(arg0, arg1), + Sysno::mlock => Syscall::Mlock(arg0, arg1), + Sysno::munlock => Syscall::Munlock(arg0, arg1), + Sysno::mlockall => Syscall::Mlockall(arg0), + Sysno::munlockall => Syscall::Munlockall, + Sysno::vhangup => Syscall::Vhangup, + Sysno::modify_ldt => Syscall::ModifyLdt(arg0, arg1, arg2), + Sysno::pivot_root => Syscall::PivotRoot(arg0, arg1), + Sysno::_sysctl => Syscall::_Sysctl(arg0), + Sysno::prctl => Syscall::Prctl(arg0, arg1, arg2, arg3, arg4), + Sysno::arch_prctl => Syscall::ArchPrctl(arg0, arg1), + Sysno::adjtimex => Syscall::Adjtimex(arg0), + Sysno::setrlimit => Syscall::Setrlimit(arg0, arg1), + Sysno::chroot => Syscall::Chroot(arg0), + Sysno::sync => Syscall::Sync, + Sysno::acct => Syscall::Acct(arg0), + Sysno::settimeofday => Syscall::Settimeofday(arg0, arg1), + Sysno::mount => Syscall::Mount(arg0, arg1, arg2, arg3, arg4), + Sysno::umount2 => Syscall::Umount2(arg0, arg1), + Sysno::swapon => Syscall::Swapon(arg0, arg1), + Sysno::swapoff => Syscall::Swapoff(arg0), + Sysno::reboot => Syscall::Reboot(arg0, arg1, arg2, arg3), + Sysno::sethostname => Syscall::Sethostname(arg0, arg1), + Sysno::setdomainname => Syscall::Setdomainname(arg0, arg1), + Sysno::iopl => Syscall::Iopl(arg0), + Sysno::ioperm => Syscall::Ioperm(arg0, arg1, arg2), + Sysno::create_module => Syscall::CreateModule(arg0, arg1), + Sysno::init_module => Syscall::InitModule(arg0, arg1, arg2), + Sysno::delete_module => Syscall::DeleteModule(arg0, arg1), + Sysno::get_kernel_syms => Syscall::GetKernelSyms(arg0), + Sysno::query_module => Syscall::QueryModule(arg0, arg1, arg2, arg3, arg4), + Sysno::quotactl => Syscall::Quotactl(arg0, arg1, arg2, arg3), + Sysno::nfsservctl => Syscall::Nfsservctl(arg0, arg1, arg2), + Sysno::getpmsg => Syscall::Getpmsg, + Sysno::putpmsg => Syscall::Putpmsg, + Sysno::afs_syscall => Syscall::AfsSyscall, + Sysno::tuxcall => Syscall::Tuxcall, + Sysno::security => Syscall::Security, + Sysno::gettid => Syscall::Gettid, + Sysno::readahead => Syscall::Readahead(arg0, arg1, arg2), + Sysno::setxattr => Syscall::Setxattr(arg0, arg1, arg2, arg3, arg4), + Sysno::lsetxattr => Syscall::Lsetxattr(arg0, arg1, arg2, arg3, arg4), + Sysno::fsetxattr => Syscall::Fsetxattr(arg0, arg1, arg2, arg3, arg4), + Sysno::getxattr => Syscall::Getxattr(arg0, arg1, arg2, arg3), + Sysno::lgetxattr => Syscall::Lgetxattr(arg0, arg1, arg2, arg3), + Sysno::fgetxattr => Syscall::Fgetxattr(arg0, arg1, arg2, arg3), + Sysno::listxattr => Syscall::Listxattr(arg0, arg1, arg2), + Sysno::llistxattr => Syscall::Llistxattr(arg0, arg1, arg2), + Sysno::flistxattr => Syscall::Flistxattr(arg0, arg1, arg2), + Sysno::removexattr => Syscall::Removexattr(arg0, arg1), + Sysno::lremovexattr => Syscall::Lremovexattr(arg0, arg1), + Sysno::fremovexattr => Syscall::Fremovexattr(arg0, arg1), + Sysno::tkill => Syscall::Tkill(arg0, arg1), + Sysno::time => Syscall::Time(arg0), + Sysno::futex => Syscall::Futex(arg0, arg1, arg2, arg3, arg4, arg5), + Sysno::sched_setaffinity => Syscall::SchedSetaffinity(arg0, arg1, arg2), + Sysno::sched_getaffinity => Syscall::SchedGetaffinity(arg0, arg1, arg2), + Sysno::set_thread_area => Syscall::SetThreadArea(arg0), + Sysno::io_setup => Syscall::IoSetup(arg0, arg1), + Sysno::io_destroy => Syscall::IoDestroy(arg0), + Sysno::io_getevents => Syscall::IoGetevents(arg0, arg1, arg2, arg3, arg4), + Sysno::io_submit => Syscall::IoSubmit(arg0, arg1, arg2), + Sysno::io_cancel => Syscall::IoCancel(arg0, arg1, arg2), + Sysno::get_thread_area => Syscall::GetThreadArea(arg0), + Sysno::lookup_dcookie => Syscall::LookupDcookie(arg0, arg1, arg2, arg3), + Sysno::epoll_create => Syscall::EpollCreate(arg0), + Sysno::epoll_ctl_old => Syscall::EpollCtlOld, + Sysno::epoll_wait_old => Syscall::EpollWaitOld, + Sysno::remap_file_pages => Syscall::RemapFilePages(arg0, arg1, arg2, arg3, arg4), + Sysno::getdents64 => Syscall::Getdents64(arg0, arg1, arg2), + Sysno::set_tid_address => Syscall::SetTidAddress(arg0), + Sysno::restart_syscall => Syscall::RestartSyscall, + Sysno::semtimedop => Syscall::Semtimedop(arg0, arg1, arg2, arg3), + Sysno::fadvise64 => Syscall::Fadvise64(arg0, arg1, arg2, arg3), + Sysno::timer_create => Syscall::TimerCreate(arg0, arg1, arg2), + Sysno::timer_settime => Syscall::TimerSettime(arg0, arg1, arg2, arg3), + Sysno::timer_gettime => Syscall::TimerGettime(arg0, arg1), + Sysno::timer_getoverrun => Syscall::TimerGetoverrun(arg0), + Sysno::timer_delete => Syscall::TimerDelete(arg0), + Sysno::clock_settime => Syscall::ClockSettime(arg0, arg1), + Sysno::clock_gettime => Syscall::ClockGettime(arg0, arg1), + Sysno::clock_getres => Syscall::ClockGetres(arg0, arg1), + Sysno::clock_nanosleep => Syscall::ClockNanosleep(arg0, arg1, arg2, arg3), + Sysno::exit_group => Syscall::ExitGroup(arg0), + Sysno::epoll_wait => Syscall::EpollWait(arg0, arg1, arg2, arg3), + Sysno::epoll_ctl => Syscall::EpollCtl(arg0, arg1, arg2, arg3), + Sysno::tgkill => Syscall::Tgkill(arg0, arg1, arg2), + Sysno::utimes => Syscall::Utimes(arg0, arg1), + Sysno::vserver => Syscall::Vserver, + Sysno::mbind => Syscall::Mbind(arg0, arg1, arg2, arg3, arg4, arg5), + Sysno::set_mempolicy => Syscall::SetMempolicy(arg0, arg1, arg2), + Sysno::get_mempolicy => Syscall::GetMempolicy(arg0, arg1, arg2, arg3, arg4), + Sysno::mq_open => Syscall::MqOpen(arg0, arg1, arg2, arg3), + Sysno::mq_unlink => Syscall::MqUnlink(arg0), + Sysno::mq_timedsend => Syscall::MqTimedsend(arg0, arg1, arg2, arg3, arg4), + Sysno::mq_timedreceive => Syscall::MqTimedreceive(arg0, arg1, arg2, arg3, arg4), + Sysno::mq_notify => Syscall::MqNotify(arg0, arg1), + Sysno::mq_getsetattr => Syscall::MqGetsetattr(arg0, arg1, arg2), + Sysno::kexec_load => Syscall::KexecLoad(arg0, arg1, arg2, arg3), + Sysno::waitid => Syscall::Waitid(arg0, arg1, arg2, arg3, arg4), + Sysno::add_key => Syscall::AddKey(arg0, arg1, arg2, arg3), + Sysno::request_key => Syscall::RequestKey(arg0, arg1, arg2), + Sysno::keyctl => Syscall::Keyctl(arg0, arg1, arg2, arg3, arg4), + Sysno::ioprio_set => Syscall::IoprioSet(arg0, arg1, arg2), + Sysno::ioprio_get => Syscall::IoprioGet(arg0, arg1), + Sysno::inotify_init => Syscall::InotifyInit, + Sysno::inotify_add_watch => Syscall::InotifyAddWatch(arg0, arg1, arg2), + Sysno::inotify_rm_watch => Syscall::InotifyRmWatch(arg0, arg1), + Sysno::migrate_pages => Syscall::MigratePages(arg0, arg1, arg2, arg3), + Sysno::openat => Syscall::Openat(arg0, arg1, arg2, arg3), + Sysno::mkdirat => Syscall::Mkdirat(arg0, arg1, arg2), + Sysno::mknodat => Syscall::Mknodat(arg0, arg1, arg2, arg3), + Sysno::fchownat => Syscall::Fchownat(arg0, arg1, arg2, arg3, arg4), + Sysno::futimesat => Syscall::Futimesat(arg0, arg1, arg2), + Sysno::newfstatat => Syscall::Newfstatat(arg0, arg1, arg2, arg3), + Sysno::unlinkat => Syscall::Unlinkat(arg0, arg1, arg2), + Sysno::renameat => Syscall::Renameat(arg0, arg1, arg2, arg3), + Sysno::linkat => Syscall::Linkat(arg0, arg1, arg2, arg3, arg4), + Sysno::symlinkat => Syscall::Symlinkat(arg0, arg1, arg2), + Sysno::readlinkat => Syscall::Readlinkat(arg0, arg1, arg2, arg3), + Sysno::fchmodat => Syscall::Fchmodat(arg0, arg1, arg2), + Sysno::faccessat => Syscall::Faccessat(arg0, arg1, arg2), + Sysno::pselect6 => Syscall::Pselect6(arg0, arg1, arg2, arg3, arg4, arg5), + Sysno::ppoll => Syscall::Ppoll(arg0, arg1, arg2, arg3, arg4), + Sysno::unshare => Syscall::Unshare(arg0), + Sysno::set_robust_list => Syscall::SetRobustList(arg0, arg1), + Sysno::get_robust_list => Syscall::GetRobustList(arg0, arg1, arg2), + Sysno::splice => Syscall::Splice(arg0, arg1, arg2, arg3, arg4, arg5), + Sysno::tee => Syscall::Tee(arg0, arg1, arg2, arg3), + Sysno::sync_file_range => Syscall::SyncFileRange(arg0, arg1, arg2, arg3), + Sysno::vmsplice => Syscall::Vmsplice(arg0, arg1, arg2, arg3), + Sysno::move_pages => Syscall::MovePages(arg0, arg1, arg2, arg3, arg4, arg5), + Sysno::utimensat => Syscall::Utimensat(arg0, arg1, arg2, arg3), + Sysno::epoll_pwait => Syscall::EpollPwait(arg0, arg1, arg2, arg3, arg4, arg5), + Sysno::signalfd => Syscall::Signalfd(arg0, arg1, arg2), + Sysno::timerfd_create => Syscall::TimerfdCreate(arg0, arg1), + Sysno::eventfd => Syscall::Eventfd(arg0, arg1), + Sysno::fallocate => Syscall::Fallocate(arg0, arg1, arg2, arg3), + Sysno::timerfd_settime => Syscall::TimerfdSettime(arg0, arg1, arg2, arg3), + Sysno::timerfd_gettime => Syscall::TimerfdGettime(arg0, arg1), + Sysno::accept4 => Syscall::Accept4(arg0, arg1, arg2, arg3), + Sysno::signalfd4 => Syscall::Signalfd4(arg0, arg1, arg2, arg3), + Sysno::eventfd2 => Syscall::Eventfd2(arg0, arg1), + Sysno::epoll_create1 => Syscall::EpollCreate1(arg0), + Sysno::dup3 => Syscall::Dup3(arg0, arg1, arg2), + Sysno::pipe2 => Syscall::Pipe2(arg0, arg1), + Sysno::inotify_init1 => Syscall::InotifyInit1(arg0), + Sysno::preadv => Syscall::Preadv(arg0, arg1, arg2, arg3), + Sysno::pwritev => Syscall::Pwritev(arg0, arg1, arg2, arg3), + Sysno::rt_tgsigqueueinfo => Syscall::RtTgsigqueueinfo(arg0, arg1, arg2, arg3), + Sysno::perf_event_open => Syscall::PerfEventOpen(arg0, arg1, arg2, arg3, arg4), + Sysno::recvmmsg => Syscall::Recvmmsg(arg0, arg1, arg2, arg3, arg4), + Sysno::fanotify_init => Syscall::FanotifyInit(arg0, arg1), + Sysno::fanotify_mark => Syscall::FanotifyMark(arg0, arg1, arg2, arg3, arg4), + Sysno::prlimit64 => Syscall::Prlimit64(arg0, arg1, arg2, arg3), + Sysno::name_to_handle_at => Syscall::NameToHandleAt(arg0, arg1, arg2, arg3, arg4), + Sysno::open_by_handle_at => Syscall::OpenByHandleAt(arg0, arg1, arg2), + Sysno::clock_adjtime => Syscall::ClockAdjtime(arg0, arg1), + Sysno::syncfs => Syscall::Syncfs(arg0), + Sysno::sendmmsg => Syscall::Sendmmsg(arg0, arg1, arg2, arg3), + Sysno::setns => Syscall::Setns(arg0, arg1), + Sysno::getcpu => Syscall::Getcpu(arg0, arg1, arg2), + Sysno::process_vm_readv => Syscall::ProcessVmReadv(arg0, arg1, arg2, arg3, arg4, arg5), + Sysno::process_vm_writev => Syscall::ProcessVmWritev(arg0, arg1, arg2, arg3, arg4, arg5), + Sysno::kcmp => Syscall::Kcmp(arg0, arg1, arg2, arg3, arg4), + Sysno::finit_module => Syscall::FinitModule(arg0, arg1, arg2), + Sysno::sched_setattr => Syscall::SchedSetattr(arg0, arg1, arg2), + Sysno::sched_getattr => Syscall::SchedGetattr(arg0, arg1, arg2, arg3), + Sysno::renameat2 => Syscall::Renameat2(arg0, arg1, arg2, arg3, arg4), + Sysno::seccomp => Syscall::Seccomp(arg0, arg1, arg2), + Sysno::getrandom => Syscall::Getrandom(arg0, arg1, arg2), + Sysno::memfd_create => Syscall::MemfdCreate(arg0, arg1), + Sysno::kexec_file_load => Syscall::KexecFileLoad(arg0, arg1, arg2, arg3, arg4), + Sysno::bpf => Syscall::Bpf(arg0, arg1, arg2), + Sysno::execveat => Syscall::Execveat(arg0, arg1, arg2, arg3, arg4), + Sysno::userfaultfd => Syscall::Userfaultfd(arg0), + Sysno::membarrier => Syscall::Membarrier(arg0, arg1), + Sysno::mlock2 => Syscall::Mlock2(arg0, arg1, arg2), + Sysno::copy_file_range => Syscall::CopyFileRange(arg0, arg1, arg2, arg3, arg4, arg5), + Sysno::preadv2 => Syscall::Preadv2(arg0, arg1, arg2, arg3, arg4), + Sysno::pwritev2 => Syscall::Pwritev2(arg0, arg1, arg2, arg3, arg4), + Sysno::pkey_mprotect => Syscall::PkeyMprotect(arg0, arg1, arg2, arg3), + Sysno::pkey_alloc => Syscall::PkeyAlloc(arg0, arg1), + Sysno::pkey_free => Syscall::PkeyFree(arg0), + Sysno::statx => Syscall::Statx(arg0, arg1, arg2, arg3, arg4), + Sysno::io_pgetevents => Syscall::IoPgetevents(arg0, arg1, arg2, arg3, arg4, arg5), + Sysno::rseq => Syscall::Rseq(arg0, arg1, arg2, arg3), + Sysno::pidfd_send_signal => Syscall::PidfdSendSignal(arg0, arg1, arg2, arg3), + Sysno::io_uring_setup => Syscall::IoUringSetup(arg0, arg1), + Sysno::io_uring_enter => Syscall::IoUringEnter(arg0, arg1, arg2, arg3, arg4), + Sysno::io_uring_register => Syscall::IoUringRegister(arg0, arg1, arg2, arg3), + Sysno::open_tree => Syscall::OpenTree(arg0, arg1, arg2), + Sysno::move_mount => Syscall::MoveMount(arg0, arg1, arg2, arg3, arg4), + Sysno::fsopen => Syscall::Fsopen(arg0, arg1, arg2), + Sysno::fsconfig => Syscall::Fsconfig(arg0, arg1, arg2, arg3, arg4), + Sysno::fsmount => Syscall::Fsmount(arg0, arg1, arg2), + Sysno::fspick => Syscall::Fspick(arg0, arg1, arg2), + Sysno::pidfd_open => Syscall::PidfdOpen(arg0, arg1), + Sysno::clone3 => Syscall::Clone3(arg0, arg1), + Sysno::close_range => Syscall::CloseRange(arg0, arg1, arg2), + Sysno::openat2 => Syscall::Openat2(arg0, arg1, arg2, arg3), + Sysno::pidfd_getfd => Syscall::PidfdGetfd(arg0, arg1, arg2), + Sysno::faccessat2 => Syscall::Faccessat2(arg0, arg1, arg2, arg3), + Sysno::process_madvise => Syscall::ProcessMadvise(arg0, arg1, arg2, arg3, arg4), + Sysno::epoll_pwait2 => Syscall::EpollPwait2(arg0, arg1, arg2, arg3, arg4), + Sysno::mount_setattr => Syscall::MountSetattr(arg0, arg1, arg2, arg3), + Sysno::quotactl_fd => Syscall::QuotactlFd(arg0, arg1, arg2, arg3), + Sysno::landlock_create_ruleset => Syscall::LandlockCreateRuleset(arg0, arg1, arg2), + Sysno::landlock_add_rule => Syscall::LandlockAddRule(arg0, arg1, arg2, arg3), + Sysno::landlock_restrict_self => Syscall::LandlockRestrictSelf(arg0, arg1), + Sysno::memfd_secret => Syscall::MemfdSecret(arg0), + Sysno::process_mrelease => Syscall::ProcessMrelease(arg0, arg1), + Sysno::futex_waitv => Syscall::FutexWaitv(arg0, arg1, arg2), + Sysno::set_mempolicy_home_node => Syscall::SetMempolicyHomeNode(arg0, arg1, arg2), + Sysno::cachestat => Syscall::Cachestat(arg0, arg1, arg2, arg3, arg4), + Sysno::fchmodat2 => Syscall::Fchmodat2(arg0, arg1, arg2, arg3), + Sysno::map_shadow_stack => Syscall::MapShadowStack(arg0, arg1), + Sysno::futex_wake => Syscall::FutexWake(arg0, arg1, arg2), + Sysno::futex_wait => Syscall::FutexWait(arg0, arg1, arg2), + Sysno::futex_requeue => Syscall::FutexRequeue(arg0, arg1, arg2, arg3), + Sysno::statmount => Syscall::Statmount(arg0, arg1, arg2), + Sysno::listmount => Syscall::Listmount(arg0, arg1, arg2), + Sysno::lsm_get_self_attr => Syscall::LsmGetSelfAttr(arg0, arg1, arg2, arg3), + Sysno::lsm_set_self_attr => Syscall::LsmSetSelfAttr(arg0, arg1, arg2), + Sysno::lsm_list_modules => Syscall::LsmListModules(arg0, arg1), + // _ => Syscall::Unknown(syscall_num, args), + } +} diff --git a/syscall_lib/src/lib.rs b/syscall_lib/src/lib.rs new file mode 100644 index 0000000..8d5a92c --- /dev/null +++ b/syscall_lib/src/lib.rs @@ -0,0 +1,41 @@ +mod create_syscall; +mod proxy_list; +mod syscall; +mod syscall_num; + +const CONFIG: bincode::config::Configuration = bincode::config::standard(); + +use std::{ + collections::HashMap, + sync::{Arc, Mutex}, +}; + +use bincode::{Decode, Encode}; +pub use create_syscall::create_syscall; +pub use proxy_list::syscall_should_proxy; +pub use syscall::Syscall; +pub use syscall_num::Sysno; + +#[derive(Debug, PartialEq, Eq, Encode, Decode)] +pub enum Message { + RequestMemory(isize), // Request a memory object at a specific address + UpdateMemory(isize, Vec), // Update a memory object + Syscall(isize, [isize; 6]), // Execute a syscall with arguments + SyscallReturn(isize, Option<(isize, Vec)>), // Syscall return value and optional new memory +} + +pub type ProgramMemory = Arc>>>; + +impl Message { + pub fn encode(&self) -> Vec { + bincode::encode_to_vec(self, CONFIG).unwrap() + } + + pub fn decode(bytes: &[u8]) -> Option { + if let Ok((decoded, _)) = bincode::decode_from_slice(&bytes[..], CONFIG) { + Some(decoded) + } else { + None + } + } +} diff --git a/syscall_lib/src/proxy_list.rs b/syscall_lib/src/proxy_list.rs new file mode 100644 index 0000000..c3485d2 --- /dev/null +++ b/syscall_lib/src/proxy_list.rs @@ -0,0 +1,540 @@ +use crate::{Syscall, syscall_num::Sysno}; + +pub fn syscall_should_proxy(syscall: &Syscall) -> bool { + match syscall { + // --- Filesystem & I/O Syscalls --- + // These interact with the filesystem and need to be forwarded to the remote host. + Syscall::Read(..) + | Syscall::Write(..) + | Syscall::Open(..) + | Syscall::Close(..) + | Syscall::Stat(..) + | Syscall::Fstat(..) + | Syscall::Lstat(..) + | Syscall::Openat(..) + | Syscall::Creat(..) + | Syscall::Rename(..) + | Syscall::Renameat(..) + | Syscall::Unlink(..) + | Syscall::Unlinkat(..) + | Syscall::Mkdir(..) + | Syscall::Mkdirat(..) + | Syscall::Rmdir(..) + | Syscall::Chdir(..) + | Syscall::Fchdir(..) + | Syscall::Chmod(..) + | Syscall::Fchmod(..) + | Syscall::Fchmodat(..) + | Syscall::Chown(..) + | Syscall::Fchown(..) + | Syscall::Lchown(..) + | Syscall::Fchownat(..) + | Syscall::Access(..) + | Syscall::Faccessat(..) + | Syscall::Getdents(..) + | Syscall::Getdents64(..) + | Syscall::Readlink(..) + | Syscall::Readlinkat(..) + | Syscall::Symlink(..) + | Syscall::Symlinkat(..) + | Syscall::Truncate(..) + | Syscall::Ftruncate(..) + | Syscall::Getcwd(..) + | Syscall::Lseek(..) + | Syscall::Sendfile(..) + | Syscall::Sync + | Syscall::Fsync(..) + | Syscall::Fdatasync(..) + | Syscall::Fcntl(..) + | Syscall::Flock(..) + | Syscall::Pipe(..) + | Syscall::Pipe2(..) + | Syscall::Dup(..) + | Syscall::Dup2(..) + | Syscall::Dup3(..) + | Syscall::InotifyInit + | Syscall::InotifyInit1(..) + | Syscall::InotifyAddWatch(..) + | Syscall::InotifyRmWatch(..) + | Syscall::EpollCreate(..) + | Syscall::EpollCreate1(..) + | Syscall::EpollCtl(..) + | Syscall::EpollWait(..) + | Syscall::EpollPwait(..) + | Syscall::EpollPwait2(..) + | Syscall::Splice(..) + | Syscall::Tee(..) + | Syscall::Vmsplice(..) + | Syscall::Fallocate(..) + | Syscall::CopyFileRange(..) + | Syscall::Utimes(..) + | Syscall::Futimesat(..) + | Syscall::Getxattr(..) + | Syscall::Lgetxattr(..) + | Syscall::Fgetxattr(..) + | Syscall::Listxattr(..) + | Syscall::Llistxattr(..) + | Syscall::Flistxattr(..) + | Syscall::Setxattr(..) + | Syscall::Lsetxattr(..) + | Syscall::Fsetxattr(..) + | Syscall::Removexattr(..) + | Syscall::Lremovexattr(..) + | Syscall::Fremovexattr(..) + | Syscall::Readv(..) + | Syscall::Writev(..) + | Syscall::Pread64(..) + | Syscall::Pwrite64(..) + | Syscall::Preadv(..) + | Syscall::Pwritev(..) + | Syscall::Preadv2(..) + | Syscall::Pwritev2(..) + | Syscall::Syncfs(..) + | Syscall::Readahead(..) + | Syscall::Statx(..) => true, + + // --- Network Syscalls --- + // These are inherently remote operations. + Syscall::Socket(..) + | Syscall::Connect(..) + | Syscall::Accept(..) + | Syscall::Accept4(..) + | Syscall::Sendto(..) + | Syscall::Recvfrom(..) + | Syscall::Sendmsg(..) + | Syscall::Recvmsg(..) + | Syscall::Sendmmsg(..) + | Syscall::Recvmmsg(..) + | Syscall::Shutdown(..) + | Syscall::Bind(..) + | Syscall::Listen(..) + | Syscall::Getsockname(..) + | Syscall::Getpeername(..) + | Syscall::Socketpair(..) + | Syscall::Setsockopt(..) + | Syscall::Getsockopt(..) => true, + + // --- Process & IPC Syscalls --- + // Syscalls that create new processes or threads (fork, clone, execve) + // or manipulate inter-process state should be forwarded. + Syscall::Clone(..) + | Syscall::Clone3(..) + | Syscall::Fork + | Syscall::Vfork + | Syscall::Execve(..) + | Syscall::Execveat(..) + | Syscall::ExitGroup(..) + | Syscall::Wait4(..) + | Syscall::Waitid(..) + | Syscall::Kill(..) + | Syscall::Tgkill(..) + | Syscall::Tkill(..) + | Syscall::Semget(..) + | Syscall::Semop(..) + | Syscall::Semctl(..) + | Syscall::Semtimedop(..) + | Syscall::Shmget(..) + | Syscall::Shmat(..) + | Syscall::Shmctl(..) + | Syscall::Shmdt(..) + | Syscall::Msgget(..) + | Syscall::Msgsnd(..) + | Syscall::Msgrcv(..) + | Syscall::Msgctl(..) => true, + + // --- Other Syscalls that should be forwarded --- + // A few other miscellaneous syscalls that are typically forwarded. + Syscall::Reboot(..) + | Syscall::Adjtimex(..) + | Syscall::Gettimeofday(..) + | Syscall::Settimeofday(..) + | Syscall::ClockGettime(..) + | Syscall::ClockSettime(..) + | Syscall::ClockAdjtime(..) + | Syscall::TimerCreate(..) + | Syscall::TimerSettime(..) + | Syscall::TimerfdCreate(..) + | Syscall::TimerfdSettime(..) => true, + + // --- All other syscalls should NOT be forwarded --- + // This includes memory management, local process state queries, + // and other local operations. + _ => false, + } + + // match unsafe { std::mem::transmute::(n as i32) } { + // Sysno::read => false, + // Sysno::write => false, + // Sysno::open => false, + // Sysno::close => false, + // Sysno::stat => false, + // Sysno::fstat => false, + // Sysno::lstat => false, + // Sysno::poll => false, + // Sysno::lseek => false, + // Sysno::mmap => false, + // Sysno::mprotect => false, + // Sysno::munmap => false, + // Sysno::brk => false, + // Sysno::rt_sigaction => false, + // Sysno::rt_sigprocmask => false, + // Sysno::rt_sigreturn => false, + // Sysno::ioctl => false, + // Sysno::pread64 => false, + // Sysno::pwrite64 => false, + // Sysno::readv => false, + // Sysno::writev => false, + // Sysno::access => false, + // Sysno::pipe => false, + // Sysno::select => false, + // Sysno::sched_yield => false, + // Sysno::mremap => false, + // Sysno::msync => false, + // Sysno::mincore => false, + // Sysno::madvise => false, + // Sysno::shmget => false, + // Sysno::shmat => false, + // Sysno::shmctl => false, + // Sysno::dup => false, + // Sysno::dup2 => false, + // Sysno::pause => false, + // Sysno::nanosleep => false, + // Sysno::getitimer => false, + // Sysno::alarm => false, + // Sysno::setitimer => false, + // Sysno::getpid => false, + // Sysno::sendfile => false, + // Sysno::socket => false, + // Sysno::connect => false, + // Sysno::accept => false, + // Sysno::sendto => false, + // Sysno::recvfrom => false, + // Sysno::sendmsg => false, + // Sysno::recvmsg => false, + // Sysno::shutdown => false, + // Sysno::bind => false, + // Sysno::listen => false, + // Sysno::getsockname => false, + // Sysno::getpeername => false, + // Sysno::socketpair => false, + // Sysno::setsockopt => false, + // Sysno::getsockopt => false, + // Sysno::clone => false, + // Sysno::fork => false, + // Sysno::vfork => false, + // Sysno::execve => false, + // Sysno::exit => false, + // Sysno::wait4 => false, + // Sysno::kill => false, + // Sysno::uname => false, + // Sysno::semget => false, + // Sysno::semop => false, + // Sysno::semctl => false, + // Sysno::shmdt => false, + // Sysno::msgget => false, + // Sysno::msgsnd => false, + // Sysno::msgrcv => false, + // Sysno::msgctl => false, + // Sysno::fcntl => false, + // Sysno::flock => false, + // Sysno::fsync => false, + // Sysno::fdatasync => false, + // Sysno::truncate => false, + // Sysno::ftruncate => false, + // Sysno::getdents => false, + // Sysno::getcwd => false, + // Sysno::chdir => false, + // Sysno::fchdir => false, + // Sysno::rename => false, + // Sysno::mkdir => false, + // Sysno::rmdir => false, + // Sysno::creat => false, + // Sysno::link => false, + // Sysno::unlink => false, + // Sysno::symlink => false, + // Sysno::readlink => false, + // Sysno::chmod => false, + // Sysno::fchmod => false, + // Sysno::chown => false, + // Sysno::fchown => false, + // Sysno::lchown => false, + // Sysno::umask => false, + // Sysno::gettimeofday => false, + // Sysno::getrlimit => false, + // Sysno::getrusage => false, + // Sysno::sysinfo => false, + // Sysno::times => false, + // Sysno::ptrace => false, + // Sysno::getuid => false, + // Sysno::syslog => false, + // Sysno::getgid => false, + // Sysno::setuid => false, + // Sysno::setgid => false, + // Sysno::geteuid => false, + // Sysno::getegid => false, + // Sysno::setpgid => false, + // Sysno::getppid => false, + // Sysno::getpgrp => false, + // Sysno::setsid => false, + // Sysno::setreuid => false, + // Sysno::setregid => false, + // Sysno::getgroups => false, + // Sysno::setgroups => false, + // Sysno::setresuid => false, + // Sysno::getresuid => false, + // Sysno::setresgid => false, + // Sysno::getresgid => false, + // Sysno::getpgid => false, + // Sysno::setfsuid => false, + // Sysno::setfsgid => false, + // Sysno::getsid => false, + // Sysno::capget => false, + // Sysno::capset => false, + // Sysno::rt_sigpending => false, + // Sysno::rt_sigtimedwait => false, + // Sysno::rt_sigqueueinfo => false, + // Sysno::rt_sigsuspend => false, + // Sysno::sigaltstack => false, + // Sysno::utime => false, + // Sysno::mknod => false, + // Sysno::uselib => false, + // Sysno::personality => false, + // Sysno::ustat => false, + // Sysno::statfs => false, + // Sysno::fstatfs => false, + // Sysno::sysfs => false, + // Sysno::getpriority => false, + // Sysno::setpriority => false, + // Sysno::sched_setparam => false, + // Sysno::sched_getparam => false, + // Sysno::sched_setscheduler => false, + // Sysno::sched_getscheduler => false, + // Sysno::sched_get_priority_max => false, + // Sysno::sched_get_priority_min => false, + // Sysno::sched_rr_get_interval => false, + // Sysno::mlock => false, + // Sysno::munlock => false, + // Sysno::mlockall => false, + // Sysno::munlockall => false, + // Sysno::vhangup => false, + // Sysno::modify_ldt => false, + // Sysno::pivot_root => false, + // Sysno::_sysctl => false, + // Sysno::prctl => false, + // Sysno::arch_prctl => false, + // Sysno::adjtimex => false, + // Sysno::setrlimit => false, + // Sysno::chroot => false, + // Sysno::sync => false, + // Sysno::acct => false, + // Sysno::settimeofday => false, + // Sysno::mount => false, + // Sysno::umount2 => false, + // Sysno::swapon => false, + // Sysno::swapoff => false, + // Sysno::reboot => false, + // Sysno::sethostname => false, + // Sysno::setdomainname => false, + // Sysno::iopl => false, + // Sysno::ioperm => false, + // Sysno::create_module => false, + // Sysno::init_module => false, + // Sysno::delete_module => false, + // Sysno::get_kernel_syms => false, + // Sysno::query_module => false, + // Sysno::quotactl => false, + // Sysno::nfsservctl => false, + // Sysno::getpmsg => false, + // Sysno::putpmsg => false, + // Sysno::afs_syscall => false, + // Sysno::tuxcall => false, + // Sysno::security => false, + // Sysno::gettid => false, + // Sysno::readahead => false, + // Sysno::setxattr => false, + // Sysno::lsetxattr => false, + // Sysno::fsetxattr => false, + // Sysno::getxattr => false, + // Sysno::lgetxattr => false, + // Sysno::fgetxattr => false, + // Sysno::listxattr => false, + // Sysno::llistxattr => false, + // Sysno::flistxattr => false, + // Sysno::removexattr => false, + // Sysno::lremovexattr => false, + // Sysno::fremovexattr => false, + // Sysno::tkill => false, + // Sysno::time => false, + // Sysno::futex => false, + // Sysno::sched_setaffinity => false, + // Sysno::sched_getaffinity => false, + // Sysno::set_thread_area => false, + // Sysno::io_setup => false, + // Sysno::io_destroy => false, + // Sysno::io_getevents => false, + // Sysno::io_submit => false, + // Sysno::io_cancel => false, + // Sysno::get_thread_area => false, + // Sysno::lookup_dcookie => false, + // Sysno::epoll_create => false, + // Sysno::epoll_ctl_old => false, + // Sysno::epoll_wait_old => false, + // Sysno::remap_file_pages => false, + // Sysno::getdents64 => false, + // Sysno::set_tid_address => false, + // Sysno::restart_syscall => false, + // Sysno::semtimedop => false, + // Sysno::fadvise64 => false, + // Sysno::timer_create => false, + // Sysno::timer_settime => false, + // Sysno::timer_gettime => false, + // Sysno::timer_getoverrun => false, + // Sysno::timer_delete => false, + // Sysno::clock_settime => false, + // Sysno::clock_gettime => false, + // Sysno::clock_getres => false, + // Sysno::clock_nanosleep => false, + // Sysno::exit_group => true, + // Sysno::epoll_wait => false, + // Sysno::epoll_ctl => false, + // Sysno::tgkill => false, + // Sysno::utimes => false, + // Sysno::vserver => false, + // Sysno::mbind => false, + // Sysno::set_mempolicy => false, + // Sysno::get_mempolicy => false, + // Sysno::mq_open => false, + // Sysno::mq_unlink => false, + // Sysno::mq_timedsend => false, + // Sysno::mq_timedreceive => false, + // Sysno::mq_notify => false, + // Sysno::mq_getsetattr => false, + // Sysno::kexec_load => false, + // Sysno::waitid => false, + // Sysno::add_key => false, + // Sysno::request_key => false, + // Sysno::keyctl => false, + // Sysno::ioprio_set => false, + // Sysno::ioprio_get => false, + // Sysno::inotify_init => false, + // Sysno::inotify_add_watch => false, + // Sysno::inotify_rm_watch => false, + // Sysno::migrate_pages => false, + // Sysno::openat => false, + // Sysno::mkdirat => false, + // Sysno::mknodat => false, + // Sysno::fchownat => false, + // Sysno::futimesat => false, + // Sysno::newfstatat => false, + // Sysno::unlinkat => false, + // Sysno::renameat => false, + // Sysno::linkat => false, + // Sysno::symlinkat => false, + // Sysno::readlinkat => false, + // Sysno::fchmodat => false, + // Sysno::faccessat => false, + // Sysno::pselect6 => false, + // Sysno::ppoll => false, + // Sysno::unshare => false, + // Sysno::set_robust_list => false, + // Sysno::get_robust_list => false, + // Sysno::splice => false, + // Sysno::tee => false, + // Sysno::sync_file_range => false, + // Sysno::vmsplice => false, + // Sysno::move_pages => false, + // Sysno::utimensat => false, + // Sysno::epoll_pwait => false, + // Sysno::signalfd => false, + // Sysno::timerfd_create => false, + // Sysno::eventfd => false, + // Sysno::fallocate => false, + // Sysno::timerfd_settime => false, + // Sysno::timerfd_gettime => false, + // Sysno::accept4 => false, + // Sysno::signalfd4 => false, + // Sysno::eventfd2 => false, + // Sysno::epoll_create1 => false, + // Sysno::dup3 => false, + // Sysno::pipe2 => false, + // Sysno::inotify_init1 => false, + // Sysno::preadv => false, + // Sysno::pwritev => false, + // Sysno::rt_tgsigqueueinfo => false, + // Sysno::perf_event_open => false, + // Sysno::recvmmsg => false, + // Sysno::fanotify_init => false, + // Sysno::fanotify_mark => false, + // Sysno::prlimit64 => false, + // Sysno::name_to_handle_at => false, + // Sysno::open_by_handle_at => false, + // Sysno::clock_adjtime => false, + // Sysno::syncfs => false, + // Sysno::sendmmsg => false, + // Sysno::setns => false, + // Sysno::getcpu => false, + // Sysno::process_vm_readv => false, + // Sysno::process_vm_writev => false, + // Sysno::kcmp => false, + // Sysno::finit_module => false, + // Sysno::sched_setattr => false, + // Sysno::sched_getattr => false, + // Sysno::renameat2 => false, + // Sysno::seccomp => false, + // Sysno::getrandom => false, + // Sysno::memfd_create => false, + // Sysno::kexec_file_load => false, + // Sysno::bpf => false, + // Sysno::execveat => false, + // Sysno::userfaultfd => false, + // Sysno::membarrier => false, + // Sysno::mlock2 => false, + // Sysno::copy_file_range => false, + // Sysno::preadv2 => false, + // Sysno::pwritev2 => false, + // Sysno::pkey_mprotect => false, + // Sysno::pkey_alloc => false, + // Sysno::pkey_free => false, + // Sysno::statx => false, + // Sysno::io_pgetevents => false, + // Sysno::rseq => false, + // Sysno::pidfd_send_signal => false, + // Sysno::io_uring_setup => false, + // Sysno::io_uring_enter => false, + // Sysno::io_uring_register => false, + // Sysno::open_tree => false, + // Sysno::move_mount => false, + // Sysno::fsopen => false, + // Sysno::fsconfig => false, + // Sysno::fsmount => false, + // Sysno::fspick => false, + // Sysno::pidfd_open => false, + // Sysno::clone3 => false, + // Sysno::close_range => false, + // Sysno::openat2 => false, + // Sysno::pidfd_getfd => false, + // Sysno::faccessat2 => false, + // Sysno::process_madvise => false, + // Sysno::epoll_pwait2 => false, + // Sysno::mount_setattr => false, + // Sysno::quotactl_fd => false, + // Sysno::landlock_create_ruleset => false, + // Sysno::landlock_add_rule => false, + // Sysno::landlock_restrict_self => false, + // Sysno::memfd_secret => false, + // Sysno::process_mrelease => false, + // Sysno::futex_waitv => false, + // Sysno::set_mempolicy_home_node => false, + // Sysno::cachestat => false, + // Sysno::fchmodat2 => false, + // Sysno::map_shadow_stack => false, + // Sysno::futex_wake => false, + // Sysno::futex_wait => false, + // Sysno::futex_requeue => false, + // Sysno::statmount => false, + // Sysno::listmount => false, + // Sysno::lsm_get_self_attr => false, + // Sysno::lsm_set_self_attr => false, + // Sysno::lsm_list_modules => false, + // } +} diff --git a/syscall_lib/src/syscall.rs b/syscall_lib/src/syscall.rs new file mode 100644 index 0000000..5fb2c7f --- /dev/null +++ b/syscall_lib/src/syscall.rs @@ -0,0 +1,404 @@ +use bincode::{Decode, Encode}; + +/// file descriptor +type Fd = usize; +/// Memory buffer pointer +type Ptr = usize; +/// Length +type Len = usize; + +/// The `Syscall` enum represents a system call with its arguments. +/// +/// Each variant corresponds to a specific system call and holds the +/// arguments as a tuple of `usize` values. +#[derive(Debug, PartialEq, Eq, Encode, Decode)] +pub enum Syscall { + Read(Fd, Ptr, Len), + Write(Fd, Ptr, Len), + Open(Ptr, usize, usize), + Close(Fd), + Stat(Ptr, Ptr), + Fstat(Fd, Ptr), + Lstat(Ptr, Ptr), + Poll(Ptr, usize, usize), + Lseek(Fd, usize, usize), + Mmap(Ptr, Len, usize, usize, Fd, usize), + Mprotect(Ptr, Len, usize), + Munmap(Ptr, Len), + Brk(Ptr), + RtSigaction(usize, Ptr, Ptr, usize), + RtSigprocmask(usize, Ptr, Ptr, usize), + RtSigreturn, + Ioctl(Fd, usize, Ptr), + Pread64(Fd, Ptr, Len, usize), + Pwrite64(Fd, Ptr, Len, usize), + Readv(Fd, Ptr, usize), + Writev(Fd, Ptr, usize), + Access(Ptr, usize), + Pipe(Ptr), + Select(usize, Ptr, Ptr, Ptr, Ptr), + SchedYield, + Mremap(Ptr, Len, Len, usize, Ptr), + Msync(Ptr, Len, usize), + Mincore(Ptr, Len, Ptr), + Madvise(Ptr, Len, usize), + Shmget(usize, Len, usize), + Shmat(usize, Ptr, usize), + Shmctl(usize, usize, Ptr), + Dup(Fd), + Dup2(Fd, Fd), + Pause, + Nanosleep(Ptr, Ptr), + Getitimer(usize, Ptr), + Alarm(usize), + Setitimer(usize, Ptr, Ptr), + Getpid, + Sendfile(Fd, Fd, Ptr, Len), + Socket(usize, usize, usize), + Connect(Fd, Ptr, usize), + Accept(Fd, Ptr, Ptr), + Sendto(Fd, Ptr, Len, usize, Ptr, usize), + Recvfrom(Fd, Ptr, Len, usize, Ptr, Ptr), + Sendmsg(Fd, Ptr, usize), + Recvmsg(Fd, Ptr, usize), + Shutdown(Fd, usize), + Bind(Fd, Ptr, usize), + Listen(Fd, usize), + Getsockname(Fd, Ptr, Ptr), + Getpeername(Fd, Ptr, Ptr), + Socketpair(usize, usize, usize, Ptr), + Setsockopt(Fd, usize, usize, Ptr, usize), + Getsockopt(Fd, usize, usize, Ptr, Ptr), + Clone(usize, Ptr, Ptr, Ptr, Ptr), + Fork, + Vfork, + Execve(Ptr, Ptr, Ptr), + Exit(usize), + Wait4(usize, Ptr, usize, Ptr), + Kill(usize, usize), + Uname(Ptr), + Semget(usize, usize, usize), + Semop(usize, Ptr, usize), + Semctl(usize, usize, usize, usize), + Shmdt(Ptr), + Msgget(usize, usize), + Msgsnd(usize, Ptr, Len, usize), + Msgrcv(usize, Ptr, Len, usize, usize), + Msgctl(usize, usize, Ptr), + Fcntl(Fd, usize, usize), + Flock(Fd, usize), + Fsync(Fd), + Fdatasync(Fd), + Truncate(Ptr, Len), + Ftruncate(Fd, Len), + Getdents(Fd, Ptr, Len), + Getcwd(Ptr, Len), + Chdir(Ptr), + Fchdir(Fd), + Rename(Ptr, Ptr), + Mkdir(Ptr, usize), + Rmdir(Ptr), + Creat(Ptr, usize), + Link(Ptr, Ptr), + Unlink(Ptr), + Symlink(Ptr, Ptr), + Readlink(Ptr, Ptr, Len), + Chmod(Ptr, usize), + Fchmod(Fd, usize), + Chown(Ptr, usize, usize), + Fchown(Fd, usize, usize), + Lchown(Ptr, usize, usize), + Umask(usize), + Gettimeofday(Ptr, Ptr), + Getrlimit(usize, Ptr), + Getrusage(usize, Ptr), + Sysinfo(Ptr), + Times(Ptr), + Ptrace(usize, usize, Ptr, Ptr), + Getuid, + Syslog(usize, Ptr, Len), + Getgid, + Setuid(usize), + Setgid(usize), + Geteuid, + Getegid, + Setpgid(usize, usize), + Getppid, + Getpgrp, + Setsid, + Setreuid(usize, usize), + Setregid(usize, usize), + Getgroups(usize, Ptr), + Setgroups(usize, Ptr), + Setresuid(usize, usize, usize), + Getresuid(Ptr, Ptr, Ptr), + Setresgid(usize, usize, usize), + Getresgid(Ptr, Ptr, Ptr), + Getpgid(usize), + Setfsuid(usize), + Setfsgid(usize), + Getsid(usize), + Capget(usize, usize), + Capset(usize, usize), + RtSigpending(Ptr, usize), + RtSigtimedwait(Ptr, Ptr, Ptr, usize), + RtSigqueueinfo(usize, usize, Ptr), + RtSigsuspend(Ptr, usize), + Sigaltstack(Ptr, Ptr), + Utime(Ptr, Ptr), + Mknod(Ptr, usize, usize), + Uselib(Ptr), + Personality(usize), + Ustat(usize, Ptr), + Statfs(Ptr, Ptr), + Fstatfs(Fd, Ptr), + Sysfs(usize, usize, usize), + Getpriority(usize, usize), + Setpriority(usize, usize, usize), + SchedSetparam(usize, Ptr), + SchedGetparam(usize, Ptr), + SchedSetscheduler(usize, usize, Ptr), + SchedGetscheduler(usize), + SchedGetPriorityMax(usize), + SchedGetPriorityMin(usize), + SchedRrGetInterval(usize, Ptr), + Mlock(Ptr, Len), + Munlock(Ptr, Len), + Mlockall(usize), + Munlockall, + Vhangup, + ModifyLdt(usize, Ptr, usize), + PivotRoot(Ptr, Ptr), + _Sysctl(Ptr), + Prctl(usize, usize, usize, usize, usize), + ArchPrctl(usize, Ptr), + Adjtimex(Ptr), + Setrlimit(usize, Ptr), + Chroot(Ptr), + Sync, + Acct(Ptr), + Settimeofday(Ptr, Ptr), + Mount(Ptr, Ptr, Ptr, usize, Ptr), + Umount2(Ptr, usize), + Swapon(Ptr, usize), + Swapoff(Ptr), + Reboot(usize, usize, usize, Ptr), + Sethostname(Ptr, Len), + Setdomainname(Ptr, Len), + Iopl(usize), + Ioperm(usize, usize, usize), + CreateModule(Ptr, Len), + InitModule(Ptr, Len, Ptr), + DeleteModule(Ptr, usize), + GetKernelSyms(Ptr), + QueryModule(Ptr, usize, Ptr, usize, Ptr), + Quotactl(usize, Ptr, usize, Ptr), + Nfsservctl(usize, Ptr, Ptr), + Getpmsg, + Putpmsg, + AfsSyscall, + Tuxcall, + Security, + Gettid, + Readahead(Fd, usize, Len), + Setxattr(Ptr, Ptr, Ptr, Len, usize), + Lsetxattr(Ptr, Ptr, Ptr, Len, usize), + Fsetxattr(Fd, Ptr, Ptr, Len, usize), + Getxattr(Ptr, Ptr, Ptr, Len), + Lgetxattr(Ptr, Ptr, Ptr, Len), + Fgetxattr(Fd, Ptr, Ptr, Len), + Listxattr(Ptr, Ptr, Len), + Llistxattr(Ptr, Ptr, Len), + Flistxattr(Fd, Ptr, Len), + Removexattr(Ptr, Ptr), + Lremovexattr(Ptr, Ptr), + Fremovexattr(Fd, Ptr), + Tkill(usize, usize), + Time(Ptr), + Futex(Ptr, usize, usize, Ptr, Ptr, usize), + SchedSetaffinity(usize, usize, Ptr), + SchedGetaffinity(usize, usize, Ptr), + SetThreadArea(Ptr), + IoSetup(usize, Ptr), + IoDestroy(usize), + IoGetevents(usize, usize, usize, Ptr, Ptr), + IoSubmit(usize, usize, Ptr), + IoCancel(usize, Ptr, Ptr), + GetThreadArea(Ptr), + LookupDcookie(usize, Ptr, usize, usize), + EpollCreate(usize), + EpollCtlOld, + EpollWaitOld, + RemapFilePages(Ptr, Len, usize, usize, usize), + Getdents64(Fd, Ptr, Len), + SetTidAddress(Ptr), + RestartSyscall, + Semtimedop(usize, Ptr, usize, Ptr), + Fadvise64(Fd, usize, Len, usize), + TimerCreate(usize, Ptr, Ptr), + TimerSettime(usize, usize, Ptr, Ptr), + TimerGettime(usize, Ptr), + TimerGetoverrun(usize), + TimerDelete(usize), + ClockSettime(usize, Ptr), + ClockGettime(usize, Ptr), + ClockGetres(usize, Ptr), + ClockNanosleep(usize, usize, Ptr, Ptr), + ExitGroup(usize), + EpollWait(Fd, Ptr, usize, usize), + EpollCtl(Fd, usize, Fd, Ptr), + Tgkill(usize, usize, usize), + Utimes(Ptr, Ptr), + Vserver, + Mbind(Ptr, usize, usize, Ptr, usize, usize), + SetMempolicy(usize, Ptr, usize), + GetMempolicy(Ptr, Ptr, usize, Ptr, usize), + MqOpen(Ptr, usize, usize, Ptr), + MqUnlink(Ptr), + MqTimedsend(usize, Ptr, Len, usize, Ptr), + MqTimedreceive(usize, Ptr, Len, usize, Ptr), + MqNotify(usize, Ptr), + MqGetsetattr(usize, Ptr, Ptr), + KexecLoad(usize, usize, Ptr, usize), + Waitid(usize, usize, Ptr, usize, Ptr), + AddKey(Ptr, Ptr, Ptr, Len), + RequestKey(Ptr, Ptr, Ptr), + Keyctl(usize, usize, usize, usize, usize), + IoprioSet(usize, usize, usize), + IoprioGet(usize, usize), + InotifyInit, + InotifyAddWatch(Fd, Ptr, usize), + InotifyRmWatch(Fd, usize), + MigratePages(usize, Len, Ptr, Ptr), + Openat(Fd, Ptr, usize, usize), + Mkdirat(Fd, Ptr, usize), + Mknodat(Fd, Ptr, usize, usize), + Fchownat(Fd, Ptr, usize, usize, usize), + Futimesat(Fd, Ptr, Ptr), + Newfstatat(Fd, Ptr, Ptr, usize), + Unlinkat(Fd, Ptr, usize), + Renameat(Fd, Ptr, Fd, Ptr), + Linkat(Fd, Ptr, Fd, Ptr, usize), + Symlinkat(Ptr, Fd, Ptr), + Readlinkat(Fd, Ptr, Ptr, Len), + Fchmodat(Fd, Ptr, usize), + Faccessat(Fd, Ptr, usize), + Pselect6(usize, Ptr, Ptr, Ptr, Ptr, Ptr), + Ppoll(Ptr, usize, Ptr, Ptr, usize), + Unshare(usize), + SetRobustList(Ptr, Len), + GetRobustList(usize, Ptr, Ptr), + Splice(Fd, Ptr, Fd, Ptr, Len, usize), + Tee(Fd, Fd, Len, usize), + SyncFileRange(Fd, usize, usize, usize), + Vmsplice(Fd, Ptr, usize, usize), + MovePages(usize, Len, Ptr, Ptr, Ptr, usize), + Utimensat(Fd, Ptr, Ptr, usize), + EpollPwait(Fd, Ptr, usize, usize, Ptr, usize), + Signalfd(Fd, Ptr, usize), + TimerfdCreate(usize, usize), + Eventfd(usize, usize), + Fallocate(Fd, usize, usize, usize), + TimerfdSettime(Fd, usize, Ptr, Ptr), + TimerfdGettime(Fd, Ptr), + Accept4(Fd, Ptr, Ptr, usize), + Signalfd4(Fd, Ptr, usize, usize), + Eventfd2(usize, usize), + EpollCreate1(usize), + Dup3(Fd, Fd, usize), + Pipe2(Ptr, usize), + InotifyInit1(usize), + Preadv(Fd, Ptr, usize, usize), + Pwritev(Fd, Ptr, usize, usize), + RtTgsigqueueinfo(usize, usize, usize, Ptr), + PerfEventOpen(Ptr, usize, usize, Fd, usize), + Recvmmsg(Fd, Ptr, usize, usize, Ptr), + FanotifyInit(usize, usize), + FanotifyMark(usize, usize, usize, Fd, Ptr), + Prlimit64(usize, usize, Ptr, Ptr), + NameToHandleAt(Fd, Ptr, Ptr, Ptr, usize), + OpenByHandleAt(Fd, Ptr, usize), + ClockAdjtime(usize, Ptr), + Syncfs(Fd), + Sendmmsg(Fd, Ptr, usize, usize), + Setns(Fd, usize), + Getcpu(Ptr, Ptr, Ptr), + ProcessVmReadv(usize, Ptr, usize, Ptr, usize, usize), + ProcessVmWritev(usize, Ptr, usize, Ptr, usize, usize), + Kcmp(usize, usize, usize, usize, usize), + FinitModule(Fd, Ptr, usize), + SchedSetattr(usize, Ptr, usize), + SchedGetattr(usize, Ptr, usize, usize), + Renameat2(Fd, Ptr, Fd, Ptr, usize), + Seccomp(usize, usize, Ptr), + Getrandom(Ptr, Len, usize), + MemfdCreate(Ptr, usize), + KexecFileLoad(Fd, Fd, usize, Ptr, usize), + Bpf(usize, Ptr, usize), + Execveat(Fd, Ptr, Ptr, Ptr, usize), + Userfaultfd(usize), + Membarrier(usize, usize), + Mlock2(Ptr, Len, usize), + CopyFileRange(Fd, Ptr, Fd, Ptr, Len, usize), + Preadv2(Fd, Ptr, usize, usize, usize), + Pwritev2(Fd, Ptr, usize, usize, usize), + PkeyMprotect(Ptr, Len, usize, usize), + PkeyAlloc(usize, usize), + PkeyFree(usize), + Statx(Fd, Ptr, usize, usize, Ptr), + IoPgetevents(usize, usize, usize, Ptr, Ptr, usize), + Rseq(Ptr, Len, usize, usize), + PidfdSendSignal(Fd, usize, Ptr, usize), + IoUringSetup(usize, Ptr), + IoUringEnter(Fd, usize, usize, usize, Ptr), + IoUringRegister(Fd, usize, Ptr, usize), + OpenTree(Fd, Ptr, usize), + MoveMount(Fd, Ptr, Fd, Ptr, usize), + Fsopen(Ptr, usize, usize), + Fsconfig(Fd, usize, Ptr, Ptr, usize), + Fsmount(Fd, usize, usize), + Fspick(Fd, Ptr, usize), + PidfdOpen(usize, usize), + Clone3(Ptr, usize), + CloseRange(Fd, Fd, usize), + Openat2(Fd, Ptr, Ptr, usize), + PidfdGetfd(Fd, Fd, usize), + Faccessat2(Fd, Ptr, usize, usize), + ProcessMadvise(Fd, Ptr, Len, usize, usize), + EpollPwait2(Fd, Ptr, usize, Ptr, usize), + MountSetattr(Fd, Ptr, usize, Ptr), + QuotactlFd(Fd, usize, usize, Ptr), + LandlockCreateRuleset(Ptr, Len, usize), + LandlockAddRule(Fd, usize, Ptr, usize), + LandlockRestrictSelf(Fd, usize), + MemfdSecret(usize), + ProcessMrelease(Fd, usize), + FutexWaitv(Ptr, usize, usize), + SetMempolicyHomeNode(usize, Ptr, usize), + Cachestat(Fd, usize, usize, usize, Ptr), + Fchmodat2(Fd, Ptr, usize, usize), + MapShadowStack(usize, Ptr), + FutexWake(Ptr, usize, usize), + FutexWait(Ptr, usize, usize), + FutexRequeue(Ptr, usize, usize, usize), + Statmount(Fd, Ptr, usize), + Listmount(Ptr, Ptr, usize), + LsmGetSelfAttr(usize, Ptr, Ptr, Len), + LsmSetSelfAttr(usize, Ptr, usize), + LsmListModules(Ptr, usize), + Unknown(usize, [usize; 6]), +} + +impl Syscall { + pub fn encode(&self) -> Vec { + bincode::encode_to_vec(self, crate::CONFIG).unwrap() + } + + pub fn decode(bytes: &[u8]) -> Option { + if let Ok((decoded, _)) = bincode::decode_from_slice(&bytes[..], crate::CONFIG) { + Some(decoded) + } else { + None + } + } +} diff --git a/syscall_lib/src/syscall_num.rs b/syscall_lib/src/syscall_num.rs new file mode 100644 index 0000000..09fd0f4 --- /dev/null +++ b/syscall_lib/src/syscall_num.rs @@ -0,0 +1,380 @@ +///https://docs.rs/syscalls/latest/syscalls/x86_64/enum.Sysno.html +#[non_exhaustive] +#[repr(i32)] +#[derive(Debug, PartialEq, Eq)] +#[allow(non_camel_case_types)] +pub enum Sysno { + read = 0, + write = 1, + open = 2, + close = 3, + stat = 4, + fstat = 5, + lstat = 6, + poll = 7, + lseek = 8, + mmap = 9, + mprotect = 10, + munmap = 11, + brk = 12, + rt_sigaction = 13, + rt_sigprocmask = 14, + rt_sigreturn = 15, + ioctl = 16, + pread64 = 17, + pwrite64 = 18, + readv = 19, + writev = 20, + access = 21, + pipe = 22, + select = 23, + sched_yield = 24, + mremap = 25, + msync = 26, + mincore = 27, + madvise = 28, + shmget = 29, + shmat = 30, + shmctl = 31, + dup = 32, + dup2 = 33, + pause = 34, + nanosleep = 35, + getitimer = 36, + alarm = 37, + setitimer = 38, + getpid = 39, + sendfile = 40, + socket = 41, + connect = 42, + accept = 43, + sendto = 44, + recvfrom = 45, + sendmsg = 46, + recvmsg = 47, + shutdown = 48, + bind = 49, + listen = 50, + getsockname = 51, + getpeername = 52, + socketpair = 53, + setsockopt = 54, + getsockopt = 55, + clone = 56, + fork = 57, + vfork = 58, + execve = 59, + exit = 60, + wait4 = 61, + kill = 62, + uname = 63, + semget = 64, + semop = 65, + semctl = 66, + shmdt = 67, + msgget = 68, + msgsnd = 69, + msgrcv = 70, + msgctl = 71, + fcntl = 72, + flock = 73, + fsync = 74, + fdatasync = 75, + truncate = 76, + ftruncate = 77, + getdents = 78, + getcwd = 79, + chdir = 80, + fchdir = 81, + rename = 82, + mkdir = 83, + rmdir = 84, + creat = 85, + link = 86, + unlink = 87, + symlink = 88, + readlink = 89, + chmod = 90, + fchmod = 91, + chown = 92, + fchown = 93, + lchown = 94, + umask = 95, + gettimeofday = 96, + getrlimit = 97, + getrusage = 98, + sysinfo = 99, + times = 100, + ptrace = 101, + getuid = 102, + syslog = 103, + getgid = 104, + setuid = 105, + setgid = 106, + geteuid = 107, + getegid = 108, + setpgid = 109, + getppid = 110, + getpgrp = 111, + setsid = 112, + setreuid = 113, + setregid = 114, + getgroups = 115, + setgroups = 116, + setresuid = 117, + getresuid = 118, + setresgid = 119, + getresgid = 120, + getpgid = 121, + setfsuid = 122, + setfsgid = 123, + getsid = 124, + capget = 125, + capset = 126, + rt_sigpending = 127, + rt_sigtimedwait = 128, + rt_sigqueueinfo = 129, + rt_sigsuspend = 130, + sigaltstack = 131, + utime = 132, + mknod = 133, + uselib = 134, + personality = 135, + ustat = 136, + statfs = 137, + fstatfs = 138, + sysfs = 139, + getpriority = 140, + setpriority = 141, + sched_setparam = 142, + sched_getparam = 143, + sched_setscheduler = 144, + sched_getscheduler = 145, + sched_get_priority_max = 146, + sched_get_priority_min = 147, + sched_rr_get_interval = 148, + mlock = 149, + munlock = 150, + mlockall = 151, + munlockall = 152, + vhangup = 153, + modify_ldt = 154, + pivot_root = 155, + _sysctl = 156, + prctl = 157, + arch_prctl = 158, + adjtimex = 159, + setrlimit = 160, + chroot = 161, + sync = 162, + acct = 163, + settimeofday = 164, + mount = 165, + umount2 = 166, + swapon = 167, + swapoff = 168, + reboot = 169, + sethostname = 170, + setdomainname = 171, + iopl = 172, + ioperm = 173, + create_module = 174, + init_module = 175, + delete_module = 176, + get_kernel_syms = 177, + query_module = 178, + quotactl = 179, + nfsservctl = 180, + getpmsg = 181, + putpmsg = 182, + afs_syscall = 183, + tuxcall = 184, + security = 185, + gettid = 186, + readahead = 187, + setxattr = 188, + lsetxattr = 189, + fsetxattr = 190, + getxattr = 191, + lgetxattr = 192, + fgetxattr = 193, + listxattr = 194, + llistxattr = 195, + flistxattr = 196, + removexattr = 197, + lremovexattr = 198, + fremovexattr = 199, + tkill = 200, + time = 201, + futex = 202, + sched_setaffinity = 203, + sched_getaffinity = 204, + set_thread_area = 205, + io_setup = 206, + io_destroy = 207, + io_getevents = 208, + io_submit = 209, + io_cancel = 210, + get_thread_area = 211, + lookup_dcookie = 212, + epoll_create = 213, + epoll_ctl_old = 214, + epoll_wait_old = 215, + remap_file_pages = 216, + getdents64 = 217, + set_tid_address = 218, + restart_syscall = 219, + semtimedop = 220, + fadvise64 = 221, + timer_create = 222, + timer_settime = 223, + timer_gettime = 224, + timer_getoverrun = 225, + timer_delete = 226, + clock_settime = 227, + clock_gettime = 228, + clock_getres = 229, + clock_nanosleep = 230, + exit_group = 231, + epoll_wait = 232, + epoll_ctl = 233, + tgkill = 234, + utimes = 235, + vserver = 236, + mbind = 237, + set_mempolicy = 238, + get_mempolicy = 239, + mq_open = 240, + mq_unlink = 241, + mq_timedsend = 242, + mq_timedreceive = 243, + mq_notify = 244, + mq_getsetattr = 245, + kexec_load = 246, + waitid = 247, + add_key = 248, + request_key = 249, + keyctl = 250, + ioprio_set = 251, + ioprio_get = 252, + inotify_init = 253, + inotify_add_watch = 254, + inotify_rm_watch = 255, + migrate_pages = 256, + openat = 257, + mkdirat = 258, + mknodat = 259, + fchownat = 260, + futimesat = 261, + newfstatat = 262, + unlinkat = 263, + renameat = 264, + linkat = 265, + symlinkat = 266, + readlinkat = 267, + fchmodat = 268, + faccessat = 269, + pselect6 = 270, + ppoll = 271, + unshare = 272, + set_robust_list = 273, + get_robust_list = 274, + splice = 275, + tee = 276, + sync_file_range = 277, + vmsplice = 278, + move_pages = 279, + utimensat = 280, + epoll_pwait = 281, + signalfd = 282, + timerfd_create = 283, + eventfd = 284, + fallocate = 285, + timerfd_settime = 286, + timerfd_gettime = 287, + accept4 = 288, + signalfd4 = 289, + eventfd2 = 290, + epoll_create1 = 291, + dup3 = 292, + pipe2 = 293, + inotify_init1 = 294, + preadv = 295, + pwritev = 296, + rt_tgsigqueueinfo = 297, + perf_event_open = 298, + recvmmsg = 299, + fanotify_init = 300, + fanotify_mark = 301, + prlimit64 = 302, + name_to_handle_at = 303, + open_by_handle_at = 304, + clock_adjtime = 305, + syncfs = 306, + sendmmsg = 307, + setns = 308, + getcpu = 309, + process_vm_readv = 310, + process_vm_writev = 311, + kcmp = 312, + finit_module = 313, + sched_setattr = 314, + sched_getattr = 315, + renameat2 = 316, + seccomp = 317, + getrandom = 318, + memfd_create = 319, + kexec_file_load = 320, + bpf = 321, + execveat = 322, + userfaultfd = 323, + membarrier = 324, + mlock2 = 325, + copy_file_range = 326, + preadv2 = 327, + pwritev2 = 328, + pkey_mprotect = 329, + pkey_alloc = 330, + pkey_free = 331, + statx = 332, + io_pgetevents = 333, + rseq = 334, + pidfd_send_signal = 424, + io_uring_setup = 425, + io_uring_enter = 426, + io_uring_register = 427, + open_tree = 428, + move_mount = 429, + fsopen = 430, + fsconfig = 431, + fsmount = 432, + fspick = 433, + pidfd_open = 434, + clone3 = 435, + close_range = 436, + openat2 = 437, + pidfd_getfd = 438, + faccessat2 = 439, + process_madvise = 440, + epoll_pwait2 = 441, + mount_setattr = 442, + quotactl_fd = 443, + landlock_create_ruleset = 444, + landlock_add_rule = 445, + landlock_restrict_self = 446, + memfd_secret = 447, + process_mrelease = 448, + futex_waitv = 449, + set_mempolicy_home_node = 450, + cachestat = 451, + fchmodat2 = 452, + map_shadow_stack = 453, + futex_wake = 454, + futex_wait = 455, + futex_requeue = 456, + statmount = 457, + listmount = 458, + lsm_get_self_attr = 459, + lsm_set_self_attr = 460, + lsm_list_modules = 461, +}