Loading include/client/syscalls/decoder.hpp +2 −1 Original line number Diff line number Diff line Loading @@ -60,7 +60,8 @@ decode(FmtBuffer& buffer, const long syscall_number, const auto sc = lookup_by_number(syscall_number, argv); fmt::format_to(std::back_inserter(buffer), "{}(", sc.name()); fmt::format_to(std::back_inserter(buffer), "{} {}(", sc.name(), syscall_number); for(int i = 0; i < sc.num_args(); ++i) { const auto arg = sc.args().at(i); Loading src/client/gkfs_functions.cpp +2 −7 Original line number Diff line number Diff line Loading @@ -140,12 +140,6 @@ namespace gkfs::syscall { int gkfs_open(const std::string& path, mode_t mode, int flags) { if(flags & O_PATH) { LOG(ERROR, "`O_PATH` flag is not supported"); errno = ENOTSUP; return -1; } // metadata object filled during create or stat gkfs::metadata::Metadata md{}; if(flags & O_CREAT) { Loading Loading @@ -1643,7 +1637,8 @@ gkfs_close(unsigned int fd) { if(CTX->is_internal_fd(fd)) { // the client application (for some reason) is trying to close an // internal fd: ignore it return 0; return -1; // Maybe we should return -1? } return -1; Loading src/client/intercept.cpp +29 −0 Original line number Diff line number Diff line Loading @@ -409,6 +409,22 @@ hook_internal(long syscall_number, long arg0, long arg1, long arg2, long arg3, } break; case SYS_close_range: *result = syscall_no_intercept_wrapper( syscall_number, static_cast<int>(arg0), static_cast<int>(arg1), static_cast<int>(arg2)); if(*result >= 0) { for(auto i = arg0; i < arg1; i++) { if(arg1 == 2147483647) { if(i >= GKFS_MAX_INTERNAL_FDS) break; } CTX->unregister_internal_fd(i); } } break; default: // ignore any other syscalls, i.e.: pass them on to the kernel // (syscalls forwarded to the kernel that return are logged in Loading Loading @@ -486,6 +502,19 @@ hook(long syscall_number, long arg0, long arg1, long arg2, long arg3, long arg4, case SYS_close: *result = gkfs::hook::hook_close(static_cast<int>(arg0)); break; case SYS_close_range: for(auto i = arg0; i <= arg1; i++) { if(i >= GKFS_MAX_OPEN_FDS) break; *result = gkfs::hook::hook_close(i); if(*result == -1) { *result = 0; break; }; } *result = 0; break; #ifdef SYS_stat case SYS_stat: *result = Loading src/client/preload_context.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -541,7 +541,7 @@ PreloadContext::register_internal_fd(int fd) { void PreloadContext::unregister_internal_fd(int fd) { LOG(DEBUG, "unregistering internal fd {}", fd); LOG(DEBUG, "unregistering internal fd {} >= {} -> {}'", fd, MIN_INTERNAL_FD, fd >= MIN_INTERNAL_FD); assert(fd >= MIN_INTERNAL_FD); Loading src/client/syscalls/detail/syscall_info.c +107 −4 Original line number Diff line number Diff line Loading @@ -478,9 +478,6 @@ SYSCALL(getpmsg, 5, S_RET(rdec), S_NARG(arg, "arg0"), SYSCALL(readlinkat, 4, S_RET(rdec), S_NARG(atfd, "dfd"), S_NARG(cstr, "pathname"), S_NARG(ptr, "buf"), S_NARG(arg, "bufsiz")), SYSCALL(fchmodat, 3, S_RET(rdec), S_NARG(atfd, "dfd"), S_NARG(cstr, "filename"), S_NARG(octal_mode, "mode")), SYSCALL(faccessat, 3, S_RET(rdec), S_NARG(atfd, "dfd"), S_NARG(cstr, "pathname"), S_NARG(octal_mode, "mode")), #ifdef SYS_faccessat2 SYSCALL(faccessat2, 4, S_RET(rdec), S_NARG(atfd, "dfd"), S_NARG(cstr, "pathname"), S_NARG(octal_mode, "mode"), S_NARG(arg, "flags")), #endif SYSCALL(pselect6, 6, S_RET(rdec), S_NARG(dec, "nfds"), S_NARG(ptr, "readfds"), S_NARG(ptr, "writefds"), S_NARG(ptr, "exceptfds"), S_NARG(ptr, "timeval"), S_NARG(ptr, "sigmask")), SYSCALL(ppoll, 5, S_RET(rdec), S_NARG(ptr, "fds"), S_NARG(dec, "nfds"), S_NARG(ptr, "tmo_p"), S_NARG(ptr, "sigmask"), S_NARG(dec, "sigsetsize")), SYSCALL(unshare, 1, S_RET(rdec), S_NARG(arg, "unshare_flags")), Loading Loading @@ -596,8 +593,108 @@ SYSCALL(getpmsg, 5, S_RET(rdec), S_NARG(arg, "arg0"), #endif // SYS_io_pgetevents #ifdef SYS_rseq SYSCALL(rseq, 4, S_RET(rdec), S_NARG(ptr, "rseq"), S_NARG(dec, "rseq_len"), S_NARG(arg, "flags"), S_NARG(signum, "sig")) SYSCALL(rseq, 4, S_RET(rdec), S_NARG(ptr, "rseq"), S_NARG(dec, "rseq_len"), S_NARG(arg, "flags"), S_NARG(signum, "sig")), #endif // SYS_rseq // ifdef the next syscalls #ifdef SYS_pidfd_send_signal SYSCALL(pidfd_send_signal, 3, S_RET(rdec), S_NARG(dec, "pidfd"), S_NARG(signum, "sig"), S_NARG(arg, "flags")), #endif #ifdef SYS_io_uring_setup SYSCALL(io_uring_setup, 2, S_RET(rdec), S_NARG(arg, "entries"), S_NARG(ptr, "ring_addr")), #endif #ifdef SYS_io_uring_enter SYSCALL(io_uring_enter, 4, S_RET(rdec), S_NARG(arg, "ring_fd"), S_NARG(dec, "to_submit"), S_NARG(dec, "min_complete"), S_NARG(arg, "flags")), #endif #ifdef SYS_io_uring_register SYSCALL(io_uring_register, 4, S_RET(rdec), S_NARG(arg, "ring_fd"), S_NARG(arg, "opcode"), S_NARG(ptr, "arg"), S_NARG(arg, "nr_args")), #endif #ifdef SYS_open_tree SYSCALL(open_tree, 2, S_RET(rdec), S_NARG(cstr, "pathname"), S_NARG(open_flags, "flags")), #endif #ifdef SYS_move_mount SYSCALL(move_mount, 3, S_RET(rdec), S_NARG(cstr, "src"), S_NARG(cstr, "dst"), S_NARG(arg, "flags")), #endif #ifdef SYS_fsopen SYSCALL(fsopen, 3, S_RET(rdec), S_NARG(cstr, "fs_type"), S_NARG(cstr, "pathname"), S_NARG(open_flags, "flags")), #endif #ifdef SYS_fsconfig SYSCALL(fsconfig, 3, S_RET(rdec), S_NARG(arg, "cmd"), S_NARG(ptr, "argp"), S_NARG(ptr, "resp")), #endif #ifdef SYS_fsmount SYSCALL(fsmount, 5, S_RET(rdec), S_NARG(cstr, "fs_type"), S_NARG(cstr, "pathname"), S_NARG(cstr, "type"), S_NARG(arg, "flags"), S_NARG(ptr, "data")), #endif #ifdef SYS_fspick SYSCALL(fspick, 4, S_RET(rdec), S_NARG(arg, "arg0"), S_NARG(arg, "arg1"), S_NARG(arg, "arg2"), S_NARG(arg, "arg3")), #endif #ifdef SYS_pidfd_open SYSCALL(pidfd_open, 2, S_RET(rdec), S_NARG(dec, "pid"), S_NARG(arg, "flags")), #endif #ifdef SYS_clone3 SYSCALL(clone3, 4, S_RET(rdec), S_NARG(arg, "flags"), S_NARG(ptr, "child_tid"), S_NARG(ptr, "parent_tid"), S_NARG(ptr, "tls")), #endif #ifdef SYS_close_range SYSCALL(close_range, 3, S_RET(rdec), S_NARG(dec, "low"), S_NARG(dec, "high"), S_NARG(arg, "flags")), #endif #ifdef SYS_openat2 SYSCALL(openat2, 4, S_RET(rdec), S_NARG(atfd, "dfd"), S_NARG(cstr, "pathname"), S_NARG(open_flags, "flags"), S_NARG(ptr, "how")), #endif #ifdef SYS_pidfd_getfd SYSCALL(pidfd_getfd, 3, S_RET(rdec), S_NARG(dec, "pidfd"), S_NARG(arg, "fd"), S_NARG(arg, "flags")), #endif #ifdef SYS_faccessat2 SYSCALL(faccessat2, 4, S_RET(rdec), S_NARG(atfd, "dfd"), S_NARG(cstr, "pathname"), S_NARG(octal_mode, "mode"), S_NARG(arg, "flags")), #endif #ifdef SYS_process_madvise SYSCALL(process_madvise, 4, S_RET(rdec), S_NARG(dec, "pid"), S_NARG(ptr, "addr"), S_NARG(dec, "length"), S_NARG(arg, "advice")), #endif #ifdef SYS_epoll_pwait2 SYSCALL(epoll_pwait2, 6, S_RET(rdec), S_NARG(fd, "epfd"), S_NARG(ptr, "events"), S_NARG(dec, "maxevents"), S_NARG(dec, "timeout"), S_NARG(ptr, "sigmask"), S_NARG(dec, "sigsetsize")), #endif #ifdef SYS_mount_setattr SYSCALL(mount_setattr, 3, S_RET(rdec), S_NARG(cstr, "path"), S_NARG(ptr, "attr"), S_NARG(arg, "flags")), #endif #ifdef SYS_quotactl_fd SYSCALL(quotactl_fd, 4, S_RET(rdec), S_NARG(arg, "cmd"), S_NARG(fd, "fd"), S_NARG(arg, "id"), S_NARG(ptr, "addr")), #endif #ifdef SYS_landlock_create_ruleset SYSCALL(landlock_create_ruleset, 1, S_RET(rdec), S_NARG(arg, "flags")), #endif #ifdef SYS_landlock_add_rule SYSCALL(landlock_add_rule, 3, S_RET(rdec), S_NARG(dec, "ruleset"), S_NARG(arg, "rule"), S_NARG(arg, "flags")), #endif #ifdef SYS_landlock_restrict_self SYSCALL(landlock_restrict_self, 1, S_RET(rdec), S_NARG(dec, "ruleset")), #endif #ifdef SYS_memfd_secret SYSCALL(memfd_secret, 3, S_RET(rdec), S_NARG(cstr, "name"), S_NARG(arg, "flags"), S_NARG(ptr, "secret")), #endif #ifdef SYS_process_mrelease SYSCALL(process_mrelease, 2, S_RET(rdec), S_NARG(dec, "pid"), S_NARG(ptr, "addr")), #endif #ifdef SYS_futex_waitv SYSCALL(futex_waitv, 5, S_RET(rdec), S_NARG(ptr, "uaddr"), S_NARG(arg, "op"), S_NARG(ptr, "val"), S_NARG(ptr, "timeout"), S_NARG(dec, "flags")), #endif #ifdef SYS_set_mempolicy_home_node SYSCALL(set_mempolicy_home_node, 1, S_RET(rdec), S_NARG(arg, "node")), #endif #ifdef SYS_cachestat SYSCALL(cachestat, 1, S_RET(rdec), S_NARG(ptr, "cs")), #endif #ifdef SYS_fchmodat2 SYSCALL(fchmodat2, 4, S_RET(rdec), S_NARG(atfd, "dfd"), S_NARG(cstr, "pathname"), S_NARG(octal_mode, "mode"), S_NARG(arg, "flags")), #endif #ifdef SYS_map_shadow_stack SYSCALL(map_shadow_stack, 1, S_RET(rdec), S_NARG(arg, "flags")), #endif #ifdef SYS_futex_wake SYSCALL(futex_wake, 3, S_RET(rdec), S_NARG(ptr, "uaddr"), S_NARG(dec, "nr_wake"), S_NARG(arg, "flags")), #endif #ifdef SYS_futex_wait SYSCALL(futex_wait, 4, S_RET(rdec), S_NARG(ptr, "uaddr"), S_NARG(arg, "op"), S_NARG(ptr, "val"), S_NARG(ptr, "timeout")), #endif #ifdef SYS_futex_requeue SYSCALL(futex_requeue, 5, S_RET(rdec), S_NARG(ptr, "uaddr1"), S_NARG(ptr, "uaddr2"), S_NARG(arg, "op"), S_NARG(ptr, "val"), S_NARG(ptr, "timeout")) #endif }; static const struct syscall_info unknown_syscall = { Loading Loading @@ -742,7 +839,13 @@ const struct named_syscall_entry syscalls_by_name[] = { SYSCALL_BY_NAME(clock_nanosleep), SYSCALL_BY_NAME(clock_settime), SYSCALL_BY_NAME(clone), #ifdef SYS_clone3 SYSCALL_BY_NAME(clone3), #endif SYSCALL_BY_NAME(close), #ifdef SYS_close_range SYSCALL_BY_NAME(close_range), #endif SYSCALL_BY_NAME(connect), #ifdef SYS_copy_file_range SYSCALL_BY_NAME(copy_file_range), Loading Loading
include/client/syscalls/decoder.hpp +2 −1 Original line number Diff line number Diff line Loading @@ -60,7 +60,8 @@ decode(FmtBuffer& buffer, const long syscall_number, const auto sc = lookup_by_number(syscall_number, argv); fmt::format_to(std::back_inserter(buffer), "{}(", sc.name()); fmt::format_to(std::back_inserter(buffer), "{} {}(", sc.name(), syscall_number); for(int i = 0; i < sc.num_args(); ++i) { const auto arg = sc.args().at(i); Loading
src/client/gkfs_functions.cpp +2 −7 Original line number Diff line number Diff line Loading @@ -140,12 +140,6 @@ namespace gkfs::syscall { int gkfs_open(const std::string& path, mode_t mode, int flags) { if(flags & O_PATH) { LOG(ERROR, "`O_PATH` flag is not supported"); errno = ENOTSUP; return -1; } // metadata object filled during create or stat gkfs::metadata::Metadata md{}; if(flags & O_CREAT) { Loading Loading @@ -1643,7 +1637,8 @@ gkfs_close(unsigned int fd) { if(CTX->is_internal_fd(fd)) { // the client application (for some reason) is trying to close an // internal fd: ignore it return 0; return -1; // Maybe we should return -1? } return -1; Loading
src/client/intercept.cpp +29 −0 Original line number Diff line number Diff line Loading @@ -409,6 +409,22 @@ hook_internal(long syscall_number, long arg0, long arg1, long arg2, long arg3, } break; case SYS_close_range: *result = syscall_no_intercept_wrapper( syscall_number, static_cast<int>(arg0), static_cast<int>(arg1), static_cast<int>(arg2)); if(*result >= 0) { for(auto i = arg0; i < arg1; i++) { if(arg1 == 2147483647) { if(i >= GKFS_MAX_INTERNAL_FDS) break; } CTX->unregister_internal_fd(i); } } break; default: // ignore any other syscalls, i.e.: pass them on to the kernel // (syscalls forwarded to the kernel that return are logged in Loading Loading @@ -486,6 +502,19 @@ hook(long syscall_number, long arg0, long arg1, long arg2, long arg3, long arg4, case SYS_close: *result = gkfs::hook::hook_close(static_cast<int>(arg0)); break; case SYS_close_range: for(auto i = arg0; i <= arg1; i++) { if(i >= GKFS_MAX_OPEN_FDS) break; *result = gkfs::hook::hook_close(i); if(*result == -1) { *result = 0; break; }; } *result = 0; break; #ifdef SYS_stat case SYS_stat: *result = Loading
src/client/preload_context.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -541,7 +541,7 @@ PreloadContext::register_internal_fd(int fd) { void PreloadContext::unregister_internal_fd(int fd) { LOG(DEBUG, "unregistering internal fd {}", fd); LOG(DEBUG, "unregistering internal fd {} >= {} -> {}'", fd, MIN_INTERNAL_FD, fd >= MIN_INTERNAL_FD); assert(fd >= MIN_INTERNAL_FD); Loading
src/client/syscalls/detail/syscall_info.c +107 −4 Original line number Diff line number Diff line Loading @@ -478,9 +478,6 @@ SYSCALL(getpmsg, 5, S_RET(rdec), S_NARG(arg, "arg0"), SYSCALL(readlinkat, 4, S_RET(rdec), S_NARG(atfd, "dfd"), S_NARG(cstr, "pathname"), S_NARG(ptr, "buf"), S_NARG(arg, "bufsiz")), SYSCALL(fchmodat, 3, S_RET(rdec), S_NARG(atfd, "dfd"), S_NARG(cstr, "filename"), S_NARG(octal_mode, "mode")), SYSCALL(faccessat, 3, S_RET(rdec), S_NARG(atfd, "dfd"), S_NARG(cstr, "pathname"), S_NARG(octal_mode, "mode")), #ifdef SYS_faccessat2 SYSCALL(faccessat2, 4, S_RET(rdec), S_NARG(atfd, "dfd"), S_NARG(cstr, "pathname"), S_NARG(octal_mode, "mode"), S_NARG(arg, "flags")), #endif SYSCALL(pselect6, 6, S_RET(rdec), S_NARG(dec, "nfds"), S_NARG(ptr, "readfds"), S_NARG(ptr, "writefds"), S_NARG(ptr, "exceptfds"), S_NARG(ptr, "timeval"), S_NARG(ptr, "sigmask")), SYSCALL(ppoll, 5, S_RET(rdec), S_NARG(ptr, "fds"), S_NARG(dec, "nfds"), S_NARG(ptr, "tmo_p"), S_NARG(ptr, "sigmask"), S_NARG(dec, "sigsetsize")), SYSCALL(unshare, 1, S_RET(rdec), S_NARG(arg, "unshare_flags")), Loading Loading @@ -596,8 +593,108 @@ SYSCALL(getpmsg, 5, S_RET(rdec), S_NARG(arg, "arg0"), #endif // SYS_io_pgetevents #ifdef SYS_rseq SYSCALL(rseq, 4, S_RET(rdec), S_NARG(ptr, "rseq"), S_NARG(dec, "rseq_len"), S_NARG(arg, "flags"), S_NARG(signum, "sig")) SYSCALL(rseq, 4, S_RET(rdec), S_NARG(ptr, "rseq"), S_NARG(dec, "rseq_len"), S_NARG(arg, "flags"), S_NARG(signum, "sig")), #endif // SYS_rseq // ifdef the next syscalls #ifdef SYS_pidfd_send_signal SYSCALL(pidfd_send_signal, 3, S_RET(rdec), S_NARG(dec, "pidfd"), S_NARG(signum, "sig"), S_NARG(arg, "flags")), #endif #ifdef SYS_io_uring_setup SYSCALL(io_uring_setup, 2, S_RET(rdec), S_NARG(arg, "entries"), S_NARG(ptr, "ring_addr")), #endif #ifdef SYS_io_uring_enter SYSCALL(io_uring_enter, 4, S_RET(rdec), S_NARG(arg, "ring_fd"), S_NARG(dec, "to_submit"), S_NARG(dec, "min_complete"), S_NARG(arg, "flags")), #endif #ifdef SYS_io_uring_register SYSCALL(io_uring_register, 4, S_RET(rdec), S_NARG(arg, "ring_fd"), S_NARG(arg, "opcode"), S_NARG(ptr, "arg"), S_NARG(arg, "nr_args")), #endif #ifdef SYS_open_tree SYSCALL(open_tree, 2, S_RET(rdec), S_NARG(cstr, "pathname"), S_NARG(open_flags, "flags")), #endif #ifdef SYS_move_mount SYSCALL(move_mount, 3, S_RET(rdec), S_NARG(cstr, "src"), S_NARG(cstr, "dst"), S_NARG(arg, "flags")), #endif #ifdef SYS_fsopen SYSCALL(fsopen, 3, S_RET(rdec), S_NARG(cstr, "fs_type"), S_NARG(cstr, "pathname"), S_NARG(open_flags, "flags")), #endif #ifdef SYS_fsconfig SYSCALL(fsconfig, 3, S_RET(rdec), S_NARG(arg, "cmd"), S_NARG(ptr, "argp"), S_NARG(ptr, "resp")), #endif #ifdef SYS_fsmount SYSCALL(fsmount, 5, S_RET(rdec), S_NARG(cstr, "fs_type"), S_NARG(cstr, "pathname"), S_NARG(cstr, "type"), S_NARG(arg, "flags"), S_NARG(ptr, "data")), #endif #ifdef SYS_fspick SYSCALL(fspick, 4, S_RET(rdec), S_NARG(arg, "arg0"), S_NARG(arg, "arg1"), S_NARG(arg, "arg2"), S_NARG(arg, "arg3")), #endif #ifdef SYS_pidfd_open SYSCALL(pidfd_open, 2, S_RET(rdec), S_NARG(dec, "pid"), S_NARG(arg, "flags")), #endif #ifdef SYS_clone3 SYSCALL(clone3, 4, S_RET(rdec), S_NARG(arg, "flags"), S_NARG(ptr, "child_tid"), S_NARG(ptr, "parent_tid"), S_NARG(ptr, "tls")), #endif #ifdef SYS_close_range SYSCALL(close_range, 3, S_RET(rdec), S_NARG(dec, "low"), S_NARG(dec, "high"), S_NARG(arg, "flags")), #endif #ifdef SYS_openat2 SYSCALL(openat2, 4, S_RET(rdec), S_NARG(atfd, "dfd"), S_NARG(cstr, "pathname"), S_NARG(open_flags, "flags"), S_NARG(ptr, "how")), #endif #ifdef SYS_pidfd_getfd SYSCALL(pidfd_getfd, 3, S_RET(rdec), S_NARG(dec, "pidfd"), S_NARG(arg, "fd"), S_NARG(arg, "flags")), #endif #ifdef SYS_faccessat2 SYSCALL(faccessat2, 4, S_RET(rdec), S_NARG(atfd, "dfd"), S_NARG(cstr, "pathname"), S_NARG(octal_mode, "mode"), S_NARG(arg, "flags")), #endif #ifdef SYS_process_madvise SYSCALL(process_madvise, 4, S_RET(rdec), S_NARG(dec, "pid"), S_NARG(ptr, "addr"), S_NARG(dec, "length"), S_NARG(arg, "advice")), #endif #ifdef SYS_epoll_pwait2 SYSCALL(epoll_pwait2, 6, S_RET(rdec), S_NARG(fd, "epfd"), S_NARG(ptr, "events"), S_NARG(dec, "maxevents"), S_NARG(dec, "timeout"), S_NARG(ptr, "sigmask"), S_NARG(dec, "sigsetsize")), #endif #ifdef SYS_mount_setattr SYSCALL(mount_setattr, 3, S_RET(rdec), S_NARG(cstr, "path"), S_NARG(ptr, "attr"), S_NARG(arg, "flags")), #endif #ifdef SYS_quotactl_fd SYSCALL(quotactl_fd, 4, S_RET(rdec), S_NARG(arg, "cmd"), S_NARG(fd, "fd"), S_NARG(arg, "id"), S_NARG(ptr, "addr")), #endif #ifdef SYS_landlock_create_ruleset SYSCALL(landlock_create_ruleset, 1, S_RET(rdec), S_NARG(arg, "flags")), #endif #ifdef SYS_landlock_add_rule SYSCALL(landlock_add_rule, 3, S_RET(rdec), S_NARG(dec, "ruleset"), S_NARG(arg, "rule"), S_NARG(arg, "flags")), #endif #ifdef SYS_landlock_restrict_self SYSCALL(landlock_restrict_self, 1, S_RET(rdec), S_NARG(dec, "ruleset")), #endif #ifdef SYS_memfd_secret SYSCALL(memfd_secret, 3, S_RET(rdec), S_NARG(cstr, "name"), S_NARG(arg, "flags"), S_NARG(ptr, "secret")), #endif #ifdef SYS_process_mrelease SYSCALL(process_mrelease, 2, S_RET(rdec), S_NARG(dec, "pid"), S_NARG(ptr, "addr")), #endif #ifdef SYS_futex_waitv SYSCALL(futex_waitv, 5, S_RET(rdec), S_NARG(ptr, "uaddr"), S_NARG(arg, "op"), S_NARG(ptr, "val"), S_NARG(ptr, "timeout"), S_NARG(dec, "flags")), #endif #ifdef SYS_set_mempolicy_home_node SYSCALL(set_mempolicy_home_node, 1, S_RET(rdec), S_NARG(arg, "node")), #endif #ifdef SYS_cachestat SYSCALL(cachestat, 1, S_RET(rdec), S_NARG(ptr, "cs")), #endif #ifdef SYS_fchmodat2 SYSCALL(fchmodat2, 4, S_RET(rdec), S_NARG(atfd, "dfd"), S_NARG(cstr, "pathname"), S_NARG(octal_mode, "mode"), S_NARG(arg, "flags")), #endif #ifdef SYS_map_shadow_stack SYSCALL(map_shadow_stack, 1, S_RET(rdec), S_NARG(arg, "flags")), #endif #ifdef SYS_futex_wake SYSCALL(futex_wake, 3, S_RET(rdec), S_NARG(ptr, "uaddr"), S_NARG(dec, "nr_wake"), S_NARG(arg, "flags")), #endif #ifdef SYS_futex_wait SYSCALL(futex_wait, 4, S_RET(rdec), S_NARG(ptr, "uaddr"), S_NARG(arg, "op"), S_NARG(ptr, "val"), S_NARG(ptr, "timeout")), #endif #ifdef SYS_futex_requeue SYSCALL(futex_requeue, 5, S_RET(rdec), S_NARG(ptr, "uaddr1"), S_NARG(ptr, "uaddr2"), S_NARG(arg, "op"), S_NARG(ptr, "val"), S_NARG(ptr, "timeout")) #endif }; static const struct syscall_info unknown_syscall = { Loading Loading @@ -742,7 +839,13 @@ const struct named_syscall_entry syscalls_by_name[] = { SYSCALL_BY_NAME(clock_nanosleep), SYSCALL_BY_NAME(clock_settime), SYSCALL_BY_NAME(clone), #ifdef SYS_clone3 SYSCALL_BY_NAME(clone3), #endif SYSCALL_BY_NAME(close), #ifdef SYS_close_range SYSCALL_BY_NAME(close_range), #endif SYSCALL_BY_NAME(connect), #ifdef SYS_copy_file_range SYSCALL_BY_NAME(copy_file_range), Loading