24

I writing a Linux system call map for the radare2 debugger. This means providing a huge static array mapping system call number to a syscall name name and the number of arguments it takes. This was easy for OpenBSD as the syscall numbers are defined in sys/syscall.h and in a comment above each is the number of args. It was just a matter of writing a script to parse this and throw out the C code for the array.

On linux however, we do not have this luxury. It is easy to get the syscall number from the kernel headers, but how should I get the number of args? The only ideas I have are:

1) Type them in manually. For each and every arch (they vary between arches in linux). All 300+ of the damned things. No way!

2) Parse manual pages.

3) Write a script which tries to call each syscall with 0, 1, 2... args until the program builds. Won't work for varargs, but do syscalls support that?

There has to be a better way. Please help!

3
  • 1
    For an example of varargs, see open(). Commented Jul 6, 2011 at 23:04
  • @OliverCharlesworth what do you mean by this? sys_open() has exactly 3 arguments. Commented Aug 10, 2015 at 8:32
  • 1
    There's a great table in the Chromium OS docs. I suggest finding out how they did it. Commented Nov 9, 2021 at 10:26

7 Answers 7

26

strace (home page) has tables with all this stuff in (see linux/<platform>/syscallent.h). Source code available in GitHub/strace and GitLab/strace. For example, list of syscalls in x86_64 architecture are in this link.

Sign up to request clarification or add additional context in comments.

Comments

6

The only list I know is the kernel source, in include/linux/syscalls.h. But that is only by name, not number; I think you need to use the syscall.h header for your particular platform to get the numbers. And there are a few #ifdefs in that file...

3 Comments

it is the number of arguments for each system call i need
@vext01: I assume you also need the types? Because some arguments can be 32-bit and others 64-bit, I believe. Anyway, if you click the link to the header source I provided, you will see that the complete signature of each system call is there.
I do not need types for now, so I can parse the systrace implementation.
4

This post is worth reading. Hope this helps :)

Comments

3

Documentation parsing:

http://asm.sourceforge.net/syscall.html Parse the HTML inside the <pre> tags.

or

http://syscalls.kernelgrok.com/ Convert JSON http://syscalls.kernelgrok.com/syscalls-2.6.35.4.js

Comments

2

There are system calls with variable numbers of arguments - witness the open() call at the C level, where the third parameter is optional (might not be optional at the assembler level).

Your best bet might be to find the system calls identified by name in syscalls.h in the (preprocessed) source of the other system headers. From those, you can count the number of arguments. Just getting the right headers in place might be tricky, and there might conceivably be system calls that are never exposed as C functions directly (I haven't looked to see; it is fairly unlikely, though).

You might look at how another debugger, such as GDB, does the same job.

1 Comment

@vext01: maybe - but not on platforms w/o DWARF, so there may be ideas in there that can be used. And the DWARF info has to come from somewhere.
2

(Sorry) no idea on number of args other then man-pages, but for syscall number:

See this post on Unix & Linux Stack Exchange

This is probably the piece of code in the kernel repo, not sure.

What I am sure is the following on my machine :)

/usr/include/asm/unistd_64.h

#ifndef _ASM_X86_UNISTD_64_H
#define _ASM_X86_UNISTD_64_H 1

#define __NR_read 0
#define __NR_write 1
#define __NR_open 2
#define __NR_close 3
#define __NR_stat 4
#define __NR_fstat 5
#define __NR_lstat 6
#define __NR_poll 7
#define __NR_lseek 8
#define __NR_mmap 9
#define __NR_mprotect 10
#define __NR_munmap 11
#define __NR_brk 12
#define __NR_rt_sigaction 13
#define __NR_rt_sigprocmask 14
#define __NR_rt_sigreturn 15
#define __NR_ioctl 16
#define __NR_pread64 17
#define __NR_pwrite64 18
#define __NR_readv 19
#define __NR_writev 20
#define __NR_access 21
#define __NR_pipe 22
#define __NR_select 23
#define __NR_sched_yield 24
#define __NR_mremap 25
#define __NR_msync 26
#define __NR_mincore 27
#define __NR_madvise 28
#define __NR_shmget 29
#define __NR_shmat 30
#define __NR_shmctl 31
#define __NR_dup 32
#define __NR_dup2 33
#define __NR_pause 34
#define __NR_nanosleep 35
#define __NR_getitimer 36
#define __NR_alarm 37
#define __NR_setitimer 38
#define __NR_getpid 39
#define __NR_sendfile 40
#define __NR_socket 41
#define __NR_connect 42
#define __NR_accept 43
#define __NR_sendto 44
#define __NR_recvfrom 45
#define __NR_sendmsg 46
#define __NR_recvmsg 47
#define __NR_shutdown 48
#define __NR_bind 49
#define __NR_listen 50
#define __NR_getsockname 51
#define __NR_getpeername 52
#define __NR_socketpair 53
#define __NR_setsockopt 54
#define __NR_getsockopt 55
#define __NR_clone 56
#define __NR_fork 57
#define __NR_vfork 58
#define __NR_execve 59
#define __NR_exit 60
#define __NR_wait4 61
#define __NR_kill 62
#define __NR_uname 63
#define __NR_semget 64
#define __NR_semop 65
#define __NR_semctl 66
#define __NR_shmdt 67
#define __NR_msgget 68
#define __NR_msgsnd 69
#define __NR_msgrcv 70
#define __NR_msgctl 71
#define __NR_fcntl 72
#define __NR_flock 73
#define __NR_fsync 74
#define __NR_fdatasync 75
#define __NR_truncate 76
#define __NR_ftruncate 77
#define __NR_getdents 78
#define __NR_getcwd 79
#define __NR_chdir 80
#define __NR_fchdir 81
#define __NR_rename 82
#define __NR_mkdir 83
#define __NR_rmdir 84
#define __NR_creat 85
#define __NR_link 86
#define __NR_unlink 87
#define __NR_symlink 88
#define __NR_readlink 89
#define __NR_chmod 90
#define __NR_fchmod 91
#define __NR_chown 92
#define __NR_fchown 93
#define __NR_lchown 94
#define __NR_umask 95
#define __NR_gettimeofday 96
#define __NR_getrlimit 97
#define __NR_getrusage 98
#define __NR_sysinfo 99
#define __NR_times 100
#define __NR_ptrace 101
#define __NR_getuid 102
#define __NR_syslog 103
#define __NR_getgid 104
#define __NR_setuid 105
#define __NR_setgid 106
#define __NR_geteuid 107
#define __NR_getegid 108
#define __NR_setpgid 109
#define __NR_getppid 110
#define __NR_getpgrp 111
#define __NR_setsid 112
#define __NR_setreuid 113
#define __NR_setregid 114
#define __NR_getgroups 115
#define __NR_setgroups 116
#define __NR_setresuid 117
#define __NR_getresuid 118
#define __NR_setresgid 119
#define __NR_getresgid 120
#define __NR_getpgid 121
#define __NR_setfsuid 122
#define __NR_setfsgid 123
#define __NR_getsid 124
#define __NR_capget 125
#define __NR_capset 126
#define __NR_rt_sigpending 127
#define __NR_rt_sigtimedwait 128
#define __NR_rt_sigqueueinfo 129
#define __NR_rt_sigsuspend 130
#define __NR_sigaltstack 131
#define __NR_utime 132
#define __NR_mknod 133
#define __NR_uselib 134
#define __NR_personality 135
#define __NR_ustat 136
#define __NR_statfs 137
#define __NR_fstatfs 138
#define __NR_sysfs 139
#define __NR_getpriority 140
#define __NR_setpriority 141
#define __NR_sched_setparam 142
#define __NR_sched_getparam 143
#define __NR_sched_setscheduler 144
#define __NR_sched_getscheduler 145
#define __NR_sched_get_priority_max 146
#define __NR_sched_get_priority_min 147
#define __NR_sched_rr_get_interval 148
#define __NR_mlock 149
#define __NR_munlock 150
#define __NR_mlockall 151
#define __NR_munlockall 152
#define __NR_vhangup 153
#define __NR_modify_ldt 154
#define __NR_pivot_root 155
#define __NR__sysctl 156
#define __NR_prctl 157
#define __NR_arch_prctl 158
#define __NR_adjtimex 159
#define __NR_setrlimit 160
#define __NR_chroot 161
#define __NR_sync 162
#define __NR_acct 163
#define __NR_settimeofday 164
#define __NR_mount 165
#define __NR_umount2 166
#define __NR_swapon 167
#define __NR_swapoff 168
#define __NR_reboot 169
#define __NR_sethostname 170
#define __NR_setdomainname 171
#define __NR_iopl 172
#define __NR_ioperm 173
#define __NR_create_module 174
#define __NR_init_module 175
#define __NR_delete_module 176
#define __NR_get_kernel_syms 177
#define __NR_query_module 178
#define __NR_quotactl 179
#define __NR_nfsservctl 180
#define __NR_getpmsg 181
#define __NR_putpmsg 182
#define __NR_afs_syscall 183
#define __NR_tuxcall 184
#define __NR_security 185
#define __NR_gettid 186
#define __NR_readahead 187
#define __NR_setxattr 188
#define __NR_lsetxattr 189
#define __NR_fsetxattr 190
#define __NR_getxattr 191
#define __NR_lgetxattr 192
#define __NR_fgetxattr 193
#define __NR_listxattr 194
#define __NR_llistxattr 195
#define __NR_flistxattr 196
#define __NR_removexattr 197
#define __NR_lremovexattr 198
#define __NR_fremovexattr 199
#define __NR_tkill 200
#define __NR_time 201
#define __NR_futex 202
#define __NR_sched_setaffinity 203
#define __NR_sched_getaffinity 204
#define __NR_set_thread_area 205
#define __NR_io_setup 206
#define __NR_io_destroy 207
#define __NR_io_getevents 208
#define __NR_io_submit 209
#define __NR_io_cancel 210
#define __NR_get_thread_area 211
#define __NR_lookup_dcookie 212
#define __NR_epoll_create 213
#define __NR_epoll_ctl_old 214
#define __NR_epoll_wait_old 215
#define __NR_remap_file_pages 216
#define __NR_getdents64 217
#define __NR_set_tid_address 218
#define __NR_restart_syscall 219
#define __NR_semtimedop 220
#define __NR_fadvise64 221
#define __NR_timer_create 222
#define __NR_timer_settime 223
#define __NR_timer_gettime 224
#define __NR_timer_getoverrun 225
#define __NR_timer_delete 226
#define __NR_clock_settime 227
#define __NR_clock_gettime 228
#define __NR_clock_getres 229
#define __NR_clock_nanosleep 230
#define __NR_exit_group 231
#define __NR_epoll_wait 232
#define __NR_epoll_ctl 233
#define __NR_tgkill 234
#define __NR_utimes 235
#define __NR_vserver 236
#define __NR_mbind 237
#define __NR_set_mempolicy 238
#define __NR_get_mempolicy 239
#define __NR_mq_open 240
#define __NR_mq_unlink 241
#define __NR_mq_timedsend 242
#define __NR_mq_timedreceive 243
#define __NR_mq_notify 244
#define __NR_mq_getsetattr 245
#define __NR_kexec_load 246
#define __NR_waitid 247
#define __NR_add_key 248
#define __NR_request_key 249
#define __NR_keyctl 250
#define __NR_ioprio_set 251
#define __NR_ioprio_get 252
#define __NR_inotify_init 253
#define __NR_inotify_add_watch 254
#define __NR_inotify_rm_watch 255
#define __NR_migrate_pages 256
#define __NR_openat 257
#define __NR_mkdirat 258
#define __NR_mknodat 259
#define __NR_fchownat 260
#define __NR_futimesat 261
#define __NR_newfstatat 262
#define __NR_unlinkat 263
#define __NR_renameat 264
#define __NR_linkat 265
#define __NR_symlinkat 266
#define __NR_readlinkat 267
#define __NR_fchmodat 268
#define __NR_faccessat 269
#define __NR_pselect6 270
#define __NR_ppoll 271
#define __NR_unshare 272
#define __NR_set_robust_list 273
#define __NR_get_robust_list 274
#define __NR_splice 275
#define __NR_tee 276
#define __NR_sync_file_range 277
#define __NR_vmsplice 278
#define __NR_move_pages 279
#define __NR_utimensat 280
#define __NR_epoll_pwait 281
#define __NR_signalfd 282
#define __NR_timerfd_create 283
#define __NR_eventfd 284
#define __NR_fallocate 285
#define __NR_timerfd_settime 286
#define __NR_timerfd_gettime 287
#define __NR_accept4 288
#define __NR_signalfd4 289
#define __NR_eventfd2 290
#define __NR_epoll_create1 291
#define __NR_dup3 292
#define __NR_pipe2 293
#define __NR_inotify_init1 294
#define __NR_preadv 295
#define __NR_pwritev 296
#define __NR_rt_tgsigqueueinfo 297
#define __NR_perf_event_open 298
#define __NR_recvmmsg 299
#define __NR_fanotify_init 300
#define __NR_fanotify_mark 301
#define __NR_prlimit64 302
#define __NR_name_to_handle_at 303
#define __NR_open_by_handle_at 304
#define __NR_clock_adjtime 305
#define __NR_syncfs 306
#define __NR_sendmmsg 307
#define __NR_setns 308
#define __NR_getcpu 309
#define __NR_process_vm_readv 310
#define __NR_process_vm_writev 311
#define __NR_kcmp 312
#define __NR_finit_module 313
#define __NR_sched_setattr 314
#define __NR_sched_getattr 315
#define __NR_renameat2 316
#define __NR_seccomp 317
#define __NR_getrandom 318
#define __NR_memfd_create 319
#define __NR_kexec_file_load 320
#define __NR_bpf 321
#define __NR_execveat 322
#define __NR_userfaultfd 323
#define __NR_membarrier 324
#define __NR_mlock2 325
#define __NR_copy_file_range 326
#define __NR_preadv2 327
#define __NR_pwritev2 328
#define __NR_pkey_mprotect 329
#define __NR_pkey_alloc 330
#define __NR_pkey_free 331
#define __NR_statx 332
#define __NR_io_pgetevents 333
#define __NR_rseq 334
#define __NR_pidfd_send_signal 424
#define __NR_io_uring_setup 425
#define __NR_io_uring_enter 426
#define __NR_io_uring_register 427
#define __NR_open_tree 428
#define __NR_move_mount 429
#define __NR_fsopen 430
#define __NR_fsconfig 431
#define __NR_fsmount 432
#define __NR_fspick 433
#define __NR_pidfd_open 434
#define __NR_clone3 435

#endif /* _ASM_X86_UNISTD_64_H */

Comments

0

Run the following against a copy of the Linux source tree to for a C syntax listing of all syscall signatures:

grep -A7 -hrEe '^SYSCALL_DEFINE[0-9][\(]' block/ crypto/ fs/ init/ io_uring/ ipc/ kernel/ lib/ mm/ rust/ net/ security/ usr/ virt/ | tr '\n' ' ' | sed -Ee 's/SYSCALL_DEFINE[0-9]\(([^,)]*)[, ]*/\nlong \1\(/g;s/[\)][^\n]*/\);/g;s/([^,\(\n]+)[,]([^,\)\n]+)([,)])[ \t]*/\1 \2\3/g;s/[ \t]+/ /g;s/$/\n/g;s/ [\*] / */g'|sed -Ee '/\-\-[ \t]*$/d'|sort -rt '(' -uk 1,1|sort|grep -vEe 'time32[\(]|__old_kernel|__kernel_old'

Running this against the latest 6.15.0-rc1 gives me:


long accept(int fd,struct sockaddr __user *upeer_sockaddr,int __user *upeer_addrlen);
long accept4(int fd,struct sockaddr __user *upeer_sockaddr,int __user *upeer_addrlen,int flags);
long access(const char __user *filename,int mode);
long acct(const char __user *name);
long add_key(const char __user *_type,const char __user *_description,const void __user *_payload,size_t plen,key_serial_t ringid);
long adjtimex(struct __kernel_timex __user *txc_p);
long alarm(unsigned int seconds);
long bind(int fd,struct sockaddr __user *umyaddr,int addrlen);
long bpf(int cmd,union bpf_attr __user *uattr,unsigned int size);
long brk(unsigned long brk);
long cachestat(unsigned int fd,struct cachestat_range __user *cstat_range,struct cachestat __user *cstat,unsigned int flags);
long capget(cap_user_header_t header,cap_user_data_t dataptr);
long capset(cap_user_header_t header,const cap_user_data_t data);
long chdir(const char __user *filename);
long chmod(const char __user *filename,umode_t mode);
long chown(const char __user *filename,uid_t user,gid_t group);
long chown16(const char __user *filename,old_uid_t user,old_gid_t group);
long chroot(const char __user *filename);
long clock_adjtime(const clockid_t which_clock,struct __kernel_timex __user *utx);
long clock_getres(const clockid_t which_clock,struct __kernel_timespec __user *tp);
long clock_gettime(const clockid_t which_clock,struct __kernel_timespec __user *tp);
long clock_nanosleep(const clockid_t which_clock,int flags,const struct __kernel_timespec __user *rqtp,struct __kernel_timespec __user *rmtp);
long clock_settime(const clockid_t which_clock,const struct __kernel_timespec __user *tp);
long clone(unsigned long clone_flags,unsigned long newsp,int __user *parent_tidptr,unsigned long tls,int __user *child_tidptr);
long clone3(struct clone_args __user *uargs,size_t size);
long close(unsigned int fd);
long close_range(unsigned int fd,unsigned int max_fd,unsigned int flags);
long connect(int fd,struct sockaddr __user *uservaddr,int addrlen);
long copy_file_range(int fd_in,loff_t __user *off_in,int fd_out,loff_t __user *off_out,size_t len,unsigned int flags);
long creat(const char __user *pathname,umode_t mode);
long delete_module(const char __user *name_user,unsigned int flags);
long dup(unsigned int fildes);
long dup2(unsigned int oldfd,unsigned int newfd);
long dup3(unsigned int oldfd,unsigned int newfd,int flags);
long epoll_create(int size);
long epoll_create1(int flags);
long epoll_ctl(int epfd,int op,int fd,struct epoll_event __user *event);
long epoll_pwait(int epfd,struct epoll_event __user *events,int maxevents,int timeout,const sigset_t __user *sigmask,size_t sigsetsize);
long epoll_pwait2(int epfd,struct epoll_event __user *events,int maxevents,const struct __kernel_timespec __user *timeout,const sigset_t __user *sigmask,size_t sigsetsize);
long epoll_wait(int epfd,struct epoll_event __user *events,int maxevents,int timeout);
long eventfd(unsigned int count);
long eventfd2(unsigned int count,int flags);
long execve( const char __user *filename,const char __user *const __user *argv,const char __user *const __user *envp);
long execveat( int fd,const char __user *filename,const char __user *const __user *argv,const char __user *const __user *envp,int flags);
long exit(int error_code);
long exit_group(int error_code);
long faccessat(int dfd,const char __user *filename,int mode);
long faccessat2(int dfd,const char __user *filename,int mode,int flags);
long fadvise64(int fd,loff_t offset,size_t len,int advice);
long fadvise64_64(int fd,loff_t offset,loff_t len,int advice);
long fallocate(int fd,int mode,loff_t offset,loff_t len);
long fanotify_init(unsigned int flags,unsigned int event_f_flags);
long fanotify_mark(int fanotify_fd,unsigned int flags,__u64 mask,int dfd,const char __user *pathname);
long fchdir(unsigned int fd);
long fchmod(unsigned int fd,umode_t mode);
long fchmodat(int dfd,const char __user *filename,umode_t mode);
long fchmodat2(int dfd,const char __user *filename,umode_t mode,unsigned int flags);
long fchown(unsigned int fd,uid_t user,gid_t group);
long fchown16(unsigned int fd,old_uid_t user,old_gid_t group);
long fchownat(int dfd,const char __user *filename,uid_t user,gid_t group,int flag);
long fcntl(unsigned int fd,unsigned int cmd,unsigned long arg);
long fcntl64(unsigned int fd,unsigned int cmd,unsigned long arg);
long fdatasync(unsigned int fd);
long fgetxattr(int fd,const char __user *name,void __user *value,size_t size);
long finit_module(int fd,const char __user *uargs,int flags);
long flistxattr(int fd,char __user *list,size_t size);
long flock(unsigned int fd,unsigned int cmd);
long fork();
long fremovexattr(int fd,const char __user *name);
long fsconfig( int fd,unsigned int cmd,const char __user *_key,const void __user *_value,int aux);
long fsetxattr(int fd,const char __user *name,const void __user *value,size_t size,int flags);
long fsmount(int fs_fd,unsigned int flags,unsigned int attr_flags);
long fsopen(const char __user *_fs_name,unsigned int flags);
long fspick(int dfd,const char __user *path,unsigned int flags);
long fstat64(unsigned long fd,struct stat64 __user *statbuf);
long fstatat64(int dfd,const char __user *filename,struct stat64 __user *statbuf,int flag);
long fstatfs(unsigned int fd,struct statfs __user *buf);
long fstatfs64(unsigned int fd,size_t sz,struct statfs64 __user *buf);
long fsync(unsigned int fd);
long ftruncate(unsigned int fd,off_t length);
long ftruncate64(unsigned int fd,loff_t length);
long futex(u32 __user *uaddr,int op,u32 val,const struct __kernel_timespec __user *utime,u32 __user *uaddr2,u32 val3);
long futex_requeue( struct futex_waitv __user *waiters,unsigned int flags,int nr_wake,int nr_requeue);
long futex_wait( void __user *uaddr,unsigned long val,unsigned long mask,unsigned int flags,struct __kernel_timespec __user *timeout,clockid_t clockid);
long futex_waitv(struct futex_waitv __user *waiters,unsigned int nr_futexes,unsigned int flags,struct __kernel_timespec __user *timeout,clockid_t clockid);
long futex_wake( void __user *uaddr,unsigned long mask,int nr,unsigned int flags);
long get_mempolicy(int __user *policy,unsigned long __user *nmask,unsigned long maxnode,unsigned long addr,unsigned long flags);
long get_robust_list(int pid,struct robust_list_head __user *__user *head_ptr,size_t __user *len_ptr);
long getcpu(unsigned __user *cpup,unsigned __user *nodep,struct getcpu_cache __user *unused);
long getcwd(char __user *buf,unsigned long size);
long getdents(unsigned int fd,struct linux_dirent __user *dirent,unsigned int count);
long getdents64(unsigned int fd,struct linux_dirent64 __user *dirent,unsigned int count);
long getegid();
long getegid16();
long geteuid();
long geteuid16();
long getgid();
long getgid16();
long getgroups(int gidsetsize,gid_t __user *grouplist);
long getgroups16(int gidsetsize,old_gid_t __user *grouplist);
long gethostname(char __user *name,int len);
long getpeername(int fd,struct sockaddr __user *usockaddr,int __user *usockaddr_len);
long getpgid(pid_t pid);
long getpgrp();
long getpid();
long getppid();
long getpriority(int which,int who);
long getresgid(gid_t __user *rgidp,gid_t __user *egidp,gid_t __user *sgidp);
long getresgid16(old_gid_t __user *rgidp,old_gid_t __user *egidp,old_gid_t __user *sgidp);
long getresuid(uid_t __user *ruidp,uid_t __user *euidp,uid_t __user *suidp);
long getresuid16(old_uid_t __user *ruidp,old_uid_t __user *euidp,old_uid_t __user *suidp);
long getrlimit(unsigned int resource,struct rlimit __user *rlim);
long getrusage(int who,struct rusage __user *ru);
long getsid(pid_t pid);
long getsockname(int fd,struct sockaddr __user *usockaddr,int __user *usockaddr_len);
long getsockopt(int fd,int level,int optname,char __user *optval,int __user *optlen);
long gettid();
long getuid();
long getuid16();
long getxattr(const char __user *pathname,const char __user *name,void __user *value,size_t size);
long getxattrat(int dfd,const char __user *pathname,unsigned int at_flags,const char __user *name,struct xattr_args __user *uargs,size_t usize);
long init_module(void __user *umod,unsigned long len,const char __user *uargs);
long inotify_add_watch(int fd,const char __user *pathname,u32 mask);
long inotify_init();
long inotify_init1(int flags);
long inotify_rm_watch(int fd,__s32 wd);
long io_cancel(aio_context_t ctx_id,struct iocb __user *iocb,struct io_event __user *result);
long io_destroy(aio_context_t ctx);
long io_getevents(aio_context_t ctx_id,long min_nr,long nr,struct io_event __user *events,struct __kernel_timespec __user *timeout);
long io_pgetevents( aio_context_t ctx_id,long min_nr,long nr,struct io_event __user *events,struct __kernel_timespec __user *timeout,const struct __aio_sigset __user *usig);
long io_setup(unsigned nr_events,aio_context_t __user *ctxp);
long io_submit(aio_context_t ctx_id,long nr,struct iocb __user *__user *iocbpp);
long io_uring_enter(unsigned int fd,u32 to_submit,u32 min_complete,u32 flags,const void __user *argp,size_t argsz);
long io_uring_register(unsigned int fd,unsigned int opcode,void __user *arg,unsigned int nr_args);
long io_uring_setup(u32 entries,struct io_uring_params __user *params);
long ioctl(unsigned int fd,unsigned int cmd,unsigned long arg);
long ioprio_get(int which,int who);
long ioprio_set(int which,int who,int ioprio);
long ipc(unsigned int call,int first,unsigned long second,unsigned long third,void __user *ptr,long fifth);
long kcmp(pid_t pid1,pid_t pid2,int type,unsigned long idx1,unsigned long idx2);
long kexec_file_load(int kernel_fd,int initrd_fd,unsigned long cmdline_len,const char __user *cmdline_ptr,unsigned long flags);
long kexec_load(unsigned long entry,unsigned long nr_segments,struct kexec_segment __user *segments,unsigned long flags);
long keyctl(int option,unsigned long arg2,unsigned long arg3,unsigned long arg4,unsigned long arg5);
long kill(pid_t pid,int sig);
long landlock_add_rule(const int ruleset_fd,const enum landlock_rule_type rule_type,const void __user *const rule_attr,const __u32 flags);
long landlock_create_ruleset( const struct landlock_ruleset_attr __user *const attr,const size_t size,const __u32 flags);
long landlock_restrict_self(const int ruleset_fd,const __u32 flags);
long lchown(const char __user *filename,uid_t user,gid_t group);
long lchown16(const char __user *filename,old_uid_t user,old_gid_t group);
long lgetxattr(const char __user *pathname,const char __user *name,void __user *value,size_t size);
long link(const char __user *oldname,const char __user *newname);
long linkat(int olddfd,const char __user *oldname,int newdfd,const char __user *newname,int flags);
long listen(int fd,int backlog);
long listmount(const struct mnt_id_req __user *req,u64 __user *mnt_ids,size_t nr_mnt_ids,unsigned int flags);
long listxattr(const char __user *pathname,char __user *list,size_t size);
long listxattrat(int dfd,const char __user *pathname,unsigned int at_flags,char __user *list,size_t size);
long llistxattr(const char __user *pathname,char __user *list,size_t size);
long llseek(unsigned int fd,unsigned long offset_high,unsigned long offset_low,loff_t __user *result,unsigned int whence);
long lremovexattr(const char __user *pathname,const char __user *name);
long lseek(unsigned int fd,off_t offset,unsigned int whence);
long lsetxattr(const char __user *pathname,const char __user *name,const void __user *value,size_t size,int flags);
long lsm_get_self_attr(unsigned int attr,struct lsm_ctx __user *ctx,u32 __user *size,u32 flags);
long lsm_list_modules(u64 __user *ids,u32 __user *size,u32 flags);
long lsm_set_self_attr(unsigned int attr,struct lsm_ctx __user *ctx,u32 size,u32 flags);
long lstat64(const char __user *filename,struct stat64 __user *statbuf);
long madvise(unsigned long start,size_t len_in,int behavior);
long mbind(unsigned long start,unsigned long len,unsigned long mode,const unsigned long __user *nmask,unsigned long maxnode,unsigned int flags);
long membarrier(int cmd,unsigned int flags,int cpu_id);
long memfd_create( const char __user *uname,unsigned int flags);
long memfd_secret(unsigned int flags);
long migrate_pages(pid_t pid,unsigned long maxnode,const unsigned long __user *old_nodes,const unsigned long __user *new_nodes);
long mincore(unsigned long start,size_t len,unsigned char __user *vec);
long mkdir(const char __user *pathname,umode_t mode);
long mkdirat(int dfd,const char __user *pathname,umode_t mode);
long mknod(const char __user *filename,umode_t mode,unsigned dev);
long mknodat(int dfd,const char __user *filename,umode_t mode,unsigned int dev);
long mlock(unsigned long start,size_t len);
long mlock2(unsigned long start,size_t len,int flags);
long mlockall(int flags);
long mmap_pgoff(unsigned long addr,unsigned long len,unsigned long prot,unsigned long flags,unsigned long fd,unsigned long pgoff);
long mount(char __user *dev_name,char __user *dir_name,char __user *type,unsigned long flags,void __user *data);
long mount_setattr(int dfd,const char __user *path,unsigned int flags,struct mount_attr __user *uattr,size_t usize);
long move_mount( int from_dfd,const char __user *from_pathname,int to_dfd,const char __user *to_pathname,unsigned int flags);
long move_pages(pid_t pid,unsigned long nr_pages,const void __user *__user *pages,const int __user *nodes,int __user *status,int flags);
long mprotect(unsigned long start,size_t len,unsigned long prot);
long mq_getsetattr(mqd_t mqdes,const struct mq_attr __user *u_mqstat,struct mq_attr __user *u_omqstat);
long mq_notify(mqd_t mqdes,const struct sigevent __user *u_notification);
long mq_open(const char __user *u_name,int oflag,umode_t mode,struct mq_attr __user *u_attr);
long mq_timedreceive(mqd_t mqdes,char __user *u_msg_ptr,size_t msg_len,unsigned int __user *u_msg_prio,const struct __kernel_timespec __user *u_abs_timeout);
long mq_timedsend(mqd_t mqdes,const char __user *u_msg_ptr,size_t msg_len,unsigned int msg_prio,const struct __kernel_timespec __user *u_abs_timeout);
long mq_unlink(const char __user *u_name);
long mremap(unsigned long addr,unsigned long old_len,unsigned long new_len,unsigned long flags,unsigned long new_addr);
long mseal(unsigned long start,size_t len,unsigned long flags);
long msgctl(int msqid,int cmd,struct msqid_ds __user *buf);
long msgget(key_t key,int msgflg);
long msgrcv(int msqid,struct msgbuf __user *msgp,size_t msgsz,long msgtyp,int msgflg);
long msgsnd(int msqid,struct msgbuf __user *msgp,size_t msgsz,int msgflg);
long msync(unsigned long start,size_t len,int flags);
long munlock(unsigned long start,size_t len);
long munlockall();
long munmap(unsigned long addr,size_t len);
long name_to_handle_at(int dfd,const char __user *name,struct file_handle __user *handle,void __user *mnt_id,int flag);
long nanosleep(struct __kernel_timespec __user *rqtp,struct __kernel_timespec __user *rmtp);
long newfstat(unsigned int fd,struct stat __user *statbuf);
long newfstatat(int dfd,const char __user *filename,struct stat __user *statbuf,int flag);
long newlstat(const char __user *filename,struct stat __user *statbuf);
long newstat(const char __user *filename,struct stat __user *statbuf);
long newuname(struct new_utsname __user *name);
long nice(int increment);
long old_getrlimit(unsigned int resource,struct rlimit __user *rlim);
long old_mmap(struct mmap_arg_struct __user *arg);
long old_msgctl(int msqid,int cmd,struct msqid_ds __user *buf);
long old_readdir(unsigned int fd,struct old_linux_dirent __user *dirent,unsigned int count);
long old_select(struct sel_arg_struct __user *arg);
long old_semctl(int semid,int semnum,int cmd,unsigned long arg);
long old_shmctl(int shmid,int cmd,struct shmid_ds __user *buf);
long oldumount(char __user *name);
long olduname(struct oldold_utsname __user *name);
long open(const char __user *filename,int flags,umode_t mode);
long open_by_handle_at(int mountdirfd,struct file_handle __user *handle,int flags);
long open_tree(int dfd,const char __user *filename,unsigned flags);
long open_tree_attr(int dfd,const char __user *filename,unsigned flags,struct mount_attr __user *uattr,size_t usize);
long openat(int dfd,const char __user *filename,int flags,umode_t mode);
long openat2(int dfd,const char __user *filename,struct open_how __user *how,size_t usize);
long pause();
long perf_event_open( struct perf_event_attr __user *attr_uptr,pid_t pid,int cpu,int group_fd,unsigned long flags);
long personality(unsigned int personality);
long pidfd_getfd(int pidfd,int fd,unsigned int flags);
long pidfd_open(pid_t pid,unsigned int flags);
long pidfd_send_signal(int pidfd,int sig,siginfo_t __user *info,unsigned int flags);
long pipe(int __user *fildes);
long pipe2(int __user *fildes,int flags);
long pivot_root(const char __user *new_root,const char __user *put_old);
long pkey_alloc(unsigned long flags,unsigned long init_val);
long pkey_free(int pkey);
long pkey_mprotect(unsigned long start,size_t len,unsigned long prot,int pkey);
long poll(struct pollfd __user *ufds,unsigned int nfds,int timeout_msecs);
long ppoll(struct pollfd __user *ufds,unsigned int nfds,struct __kernel_timespec __user *tsp,const sigset_t __user *sigmask,size_t sigsetsize);
long prctl(int option,unsigned long arg2,unsigned long arg3,unsigned long arg4,unsigned long arg5);
long pread64(unsigned int fd,char __user *buf,size_t count,loff_t pos);
long preadv(unsigned long fd,const struct iovec __user *vec,unsigned long vlen,unsigned long pos_l,unsigned long pos_h);
long preadv2(unsigned long fd,const struct iovec __user *vec,unsigned long vlen,unsigned long pos_l,unsigned long pos_h,rwf_t flags);
long prlimit64(pid_t pid,unsigned int resource,const struct rlimit64 __user *new_rlim,struct rlimit64 __user *old_rlim);
long process_madvise(int pidfd,const struct iovec __user *vec,size_t vlen,int behavior,unsigned int flags);
long process_mrelease(int pidfd,unsigned int flags);
long process_vm_readv(pid_t pid,const struct iovec __user *lvec,unsigned long liovcnt,const struct iovec __user *rvec,unsigned long riovcnt,unsigned long flags);
long process_vm_writev(pid_t pid,const struct iovec __user *lvec,unsigned long liovcnt,const struct iovec __user *rvec,unsigned long riovcnt,unsigned long flags);
long pselect6(int n,fd_set __user *inp,fd_set __user *outp,fd_set __user *exp,struct __kernel_timespec __user *tsp,void __user *sig);
long ptrace(long request,long pid,unsigned long addr,unsigned long data);
long pwrite64(unsigned int fd,const char __user *buf,size_t count,loff_t pos);
long pwritev(unsigned long fd,const struct iovec __user *vec,unsigned long vlen,unsigned long pos_l,unsigned long pos_h);
long pwritev2(unsigned long fd,const struct iovec __user *vec,unsigned long vlen,unsigned long pos_l,unsigned long pos_h,rwf_t flags);
long quotactl(unsigned int cmd,const char __user *special,qid_t id,void __user *addr);
long quotactl_fd(unsigned int fd,unsigned int cmd,qid_t id,void __user *addr);
long read(unsigned int fd,char __user *buf,size_t count);
long readahead(int fd,loff_t offset,size_t count);
long readlink(const char __user *path,char __user *buf,int bufsiz);
long readlinkat(int dfd,const char __user *pathname,char __user *buf,int bufsiz);
long readv(unsigned long fd,const struct iovec __user *vec,unsigned long vlen);
long reboot(int magic1,int magic2,unsigned int cmd,void __user *arg);
long recv(int fd,void __user *ubuf,size_t size,unsigned int flags);
long recvfrom(int fd,void __user *ubuf,size_t size,unsigned int flags,struct sockaddr __user *addr,int __user *addr_len);
long recvmmsg(int fd,struct mmsghdr __user *mmsg,unsigned int vlen,unsigned int flags,struct __kernel_timespec __user *timeout);
long recvmsg(int fd,struct user_msghdr __user *msg,unsigned int flags);
long remap_file_pages(unsigned long start,unsigned long size,unsigned long prot,unsigned long pgoff,unsigned long flags);
long removexattr(const char __user *pathname,const char __user *name);
long removexattrat(int dfd,const char __user *pathname,unsigned int at_flags,const char __user *name);
long rename(const char __user *oldname,const char __user *newname);
long renameat(int olddfd,const char __user *oldname,int newdfd,const char __user *newname);
long renameat2(int olddfd,const char __user *oldname,int newdfd,const char __user *newname,unsigned int flags);
long request_key(const char __user *_type,const char __user *_description,const char __user *_callout_info,key_serial_t destringid);
long restart_syscall();
long rmdir(const char __user *pathname);
long rseq(struct rseq __user *rseq,u32 rseq_len,int flags,u32 sig);
long rt_sigaction(int sig,const struct sigaction __user *act,struct sigaction __user *oact,size_t sigsetsize);
long rt_sigpending(sigset_t __user *uset,size_t sigsetsize);
long rt_sigprocmask(int how,sigset_t __user *nset,sigset_t __user *oset,size_t sigsetsize);
long rt_sigqueueinfo(pid_t pid,int sig,siginfo_t __user *uinfo);
long rt_sigsuspend(sigset_t __user *unewset,size_t sigsetsize);
long rt_sigtimedwait(const sigset_t __user *uthese,siginfo_t __user *uinfo,const struct __kernel_timespec __user *uts,size_t sigsetsize);
long rt_tgsigqueueinfo(pid_t tgid,pid_t pid,int sig,siginfo_t __user *uinfo);
long sched_get_priority_max(int policy);
long sched_get_priority_min(int policy);
long sched_getaffinity(pid_t pid,unsigned int len,unsigned long __user *user_mask_ptr);
long sched_getattr(pid_t pid,struct sched_attr __user *uattr,unsigned int usize,unsigned int flags);
long sched_getparam(pid_t pid,struct sched_param __user *param);
long sched_getscheduler(pid_t pid);
long sched_rr_get_interval(pid_t pid,struct __kernel_timespec __user *interval);
long sched_setaffinity(pid_t pid,unsigned int len,unsigned long __user *user_mask_ptr);
long sched_setattr(pid_t pid,struct sched_attr __user *uattr,unsigned int flags);
long sched_setparam(pid_t pid,struct sched_param __user *param);
long sched_setscheduler(pid_t pid,int policy,struct sched_param __user *param);
long sched_yield();
long seccomp(unsigned int op,unsigned int flags,void __user *uargs);
long semctl(int semid,int semnum,int cmd,unsigned long arg);
long semget(key_t key,int nsems,int semflg);
long semop(int semid,struct sembuf __user *tsops,unsigned nsops);
long semtimedop(int semid,struct sembuf __user *tsops,unsigned int nsops,const struct __kernel_timespec __user *timeout);
long send(int fd,void __user *buff,size_t len,unsigned int flags);
long sendfile(int out_fd,int in_fd,off_t __user *offset,size_t count);
long sendfile64(int out_fd,int in_fd,loff_t __user *offset,size_t count);
long sendmmsg(int fd,struct mmsghdr __user *mmsg,unsigned int vlen,unsigned int flags);
long sendmsg(int fd,struct user_msghdr __user *msg,unsigned int flags);
long sendto(int fd,void __user *buff,size_t len,unsigned int flags,struct sockaddr __user *addr,int addr_len);
long set_mempolicy(int mode,const unsigned long __user *nmask,unsigned long maxnode);
long set_mempolicy_home_node(unsigned long start,unsigned long len,unsigned long home_node,unsigned long flags);
long set_robust_list(struct robust_list_head __user *head,size_t len);
long set_tid_address(int __user *tidptr);
long setdomainname(char __user *name,int len);
long setfsgid(gid_t gid);
long setfsgid16(old_gid_t gid);
long setfsuid(uid_t uid);
long setfsuid16(old_uid_t uid);
long setgid(gid_t gid);
long setgid16(old_gid_t gid);
long setgroups(int gidsetsize,gid_t __user *grouplist);
long setgroups16(int gidsetsize,old_gid_t __user *grouplist);
long sethostname(char __user *name,int len);
long setns(int fd,int flags);
long setpgid(pid_t pid,pid_t pgid);
long setpriority(int which,int who,int niceval);
long setregid(gid_t rgid,gid_t egid);
long setregid16(old_gid_t rgid,old_gid_t egid);
long setresgid(gid_t rgid,gid_t egid,gid_t sgid);
long setresgid16(old_gid_t rgid,old_gid_t egid,old_gid_t sgid);
long setresuid(uid_t ruid,uid_t euid,uid_t suid);
long setresuid16(old_uid_t ruid,old_uid_t euid,old_uid_t suid);
long setreuid(uid_t ruid,uid_t euid);
long setreuid16(old_uid_t ruid,old_uid_t euid);
long setrlimit(unsigned int resource,struct rlimit __user *rlim);
long setsid();
long setsockopt(int fd,int level,int optname,char __user *optval,int optlen);
long setuid(uid_t uid);
long setuid16(old_uid_t uid);
long setxattr(const char __user *pathname,const char __user *name,const void __user *value,size_t size,int flags);
long setxattrat(int dfd,const char __user *pathname,unsigned int at_flags,const char __user *name,const struct xattr_args __user *uargs,size_t usize);
long sgetmask();
long shmat(int shmid,char __user *shmaddr,int shmflg);
long shmctl(int shmid,int cmd,struct shmid_ds __user *buf);
long shmdt(char __user *shmaddr);
long shmget(key_t key,size_t size,int shmflg);
long shutdown(int fd,int how);
long sigaction(int sig,const struct old_sigaction __user *act,struct old_sigaction __user *oact);
long sigaltstack(const stack_t __user *uss,stack_t __user *uoss);
long signal(int sig,__sighandler_t handler);
long signalfd(int ufd,sigset_t __user *user_mask,size_t sizemask);
long signalfd4(int ufd,sigset_t __user *user_mask,size_t sizemask,int flags);
long sigpending(old_sigset_t __user *uset);
long sigprocmask(int how,old_sigset_t __user *nset,old_sigset_t __user *oset);
long sigsuspend(old_sigset_t mask);
long socket(int family,int type,int protocol);
long socketcall(int call,unsigned long __user *args);
long socketpair(int family,int type,int protocol,int __user *usockvec);
long splice(int fd_in,loff_t __user *off_in,int fd_out,loff_t __user *off_out,size_t len,unsigned int flags);
long ssetmask(int newmask);
long stat64(const char __user *filename,struct stat64 __user *statbuf);
long statfs(const char __user *pathname,struct statfs __user *buf);
long statfs64(const char __user *pathname,size_t sz,struct statfs64 __user *buf);
long statmount(const struct mnt_id_req __user *req,struct statmount __user *buf,size_t bufsize,unsigned int flags);
long statx( int dfd,const char __user *filename,unsigned flags,unsigned int mask,struct statx __user *buffer);
long swapoff(const char __user *specialfile);
long swapon(const char __user *specialfile,int swap_flags);
long symlink(const char __user *oldname,const char __user *newname);
long symlinkat(const char __user *oldname,int newdfd,const char __user *newname);
long sync();
long sync_file_range(int fd,loff_t offset,loff_t nbytes,unsigned int flags);
long sync_file_range2(int fd,unsigned int flags,loff_t offset,loff_t nbytes);
long syncfs(int fd);
long sysfs(int option,unsigned long arg1,unsigned long arg2);
long sysinfo(struct sysinfo __user *info);
long syslog(int type,char __user *buf,int len);
long tee(int fdin,int fdout,size_t len,unsigned int flags);
long tgkill(pid_t tgid,pid_t pid,int sig);
long timer_create(const clockid_t which_clock,struct sigevent __user *timer_event_spec,timer_t __user *created_timer_id);
long timer_delete(timer_t timer_id);
long timer_getoverrun(timer_t timer_id);
long timer_gettime(timer_t timer_id,struct __kernel_itimerspec __user *setting);
long timer_settime(timer_t timer_id,int flags,const struct __kernel_itimerspec __user *new_setting,struct __kernel_itimerspec __user *old_setting);
long timerfd_create(int clockid,int flags);
long timerfd_gettime(int ufd,struct __kernel_itimerspec __user *otmr);
long timerfd_settime(int ufd,int flags,const struct __kernel_itimerspec __user *utmr,struct __kernel_itimerspec __user *otmr);
long times(struct tms __user *tbuf);
long tkill(pid_t pid,int sig);
long truncate(const char __user *path,long length);
long truncate64(const char __user *path,loff_t length);
long umask(int mask);
long umount(char __user *name,int flags);
long uname(struct old_utsname __user *name);
long unlink(const char __user *pathname);
long unlinkat(int dfd,const char __user *pathname,int flag);
long unshare(unsigned long unshare_flags);
long uselib(const char __user *library);
long userfaultfd(int flags);
long ustat(unsigned dev,struct ustat __user *ubuf);
long utime(char __user *filename,struct utimbuf __user *times);
long utimensat(int dfd,const char __user *filename,struct __kernel_timespec __user *utimes,int flags);
long vfork();
long vhangup();
long vmsplice(int fd,const struct iovec __user *uiov,unsigned long nr_segs,unsigned int flags);
long wait4(pid_t upid,int __user *stat_addr,int options,struct rusage __user *ru);
long waitid(int which,pid_t upid,struct siginfo __user *infop,int options,struct rusage __user *ru);
long waitpid(pid_t pid,int __user *stat_addr,int options);
long write(unsigned int fd,const char __user *buf,size_t count);
long writev(unsigned long fd,const struct iovec __user *vec,unsigned long vlen);

For the syscall numbers, I think Zzz0_0’s answer is perfect: https://filippo.io/linux-syscall-table/

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.