Branch data Line data Source code
1 : : // SPDX-License-Identifier: GPL-2.0 2 : : 3 : : #include <linux/linkage.h> 4 : : #include <linux/errno.h> 5 : : 6 : : #include <asm/unistd.h> 7 : : 8 : : #ifdef CONFIG_ARCH_HAS_SYSCALL_WRAPPER 9 : : /* Architectures may override COND_SYSCALL and COND_SYSCALL_COMPAT */ 10 : : #include <asm/syscall_wrapper.h> 11 : : #endif /* CONFIG_ARCH_HAS_SYSCALL_WRAPPER */ 12 : : 13 : : /* we can't #include <linux/syscalls.h> here, 14 : : but tell gcc to not warn with -Wmissing-prototypes */ 15 : : asmlinkage long sys_ni_syscall(void); 16 : : 17 : : /* 18 : : * Non-implemented system calls get redirected here. 19 : : */ 20 : 122 : asmlinkage long sys_ni_syscall(void) 21 : : { 22 : 122 : return -ENOSYS; 23 : : } 24 : : 25 : : #ifndef COND_SYSCALL 26 : : #define COND_SYSCALL(name) cond_syscall(sys_##name) 27 : : #endif /* COND_SYSCALL */ 28 : : 29 : : #ifndef COND_SYSCALL_COMPAT 30 : : #define COND_SYSCALL_COMPAT(name) cond_syscall(compat_sys_##name) 31 : : #endif /* COND_SYSCALL_COMPAT */ 32 : : 33 : : /* 34 : : * This list is kept in the same order as include/uapi/asm-generic/unistd.h. 35 : : * Architecture specific entries go below, followed by deprecated or obsolete 36 : : * system calls. 37 : : */ 38 : : 39 : 0 : COND_SYSCALL(io_setup); 40 : : COND_SYSCALL_COMPAT(io_setup); 41 : 0 : COND_SYSCALL(io_destroy); 42 : 0 : COND_SYSCALL(io_submit); 43 : : COND_SYSCALL_COMPAT(io_submit); 44 : 0 : COND_SYSCALL(io_cancel); 45 : 0 : COND_SYSCALL(io_getevents_time32); 46 : 0 : COND_SYSCALL(io_getevents); 47 : 0 : COND_SYSCALL(io_pgetevents_time32); 48 : 0 : COND_SYSCALL(io_pgetevents); 49 : : COND_SYSCALL_COMPAT(io_pgetevents_time32); 50 : : COND_SYSCALL_COMPAT(io_pgetevents); 51 : 0 : COND_SYSCALL(io_uring_setup); 52 : 0 : COND_SYSCALL(io_uring_enter); 53 : 0 : COND_SYSCALL(io_uring_register); 54 : : 55 : : /* fs/xattr.c */ 56 : : 57 : : /* fs/dcache.c */ 58 : : 59 : : /* fs/cookies.c */ 60 : 0 : COND_SYSCALL(lookup_dcookie); 61 : : COND_SYSCALL_COMPAT(lookup_dcookie); 62 : : 63 : : /* fs/eventfd.c */ 64 : 0 : COND_SYSCALL(eventfd2); 65 : : 66 : : /* fs/eventfd.c */ 67 : 0 : COND_SYSCALL(epoll_create1); 68 : 0 : COND_SYSCALL(epoll_ctl); 69 : 0 : COND_SYSCALL(epoll_pwait); 70 : : COND_SYSCALL_COMPAT(epoll_pwait); 71 : : 72 : : /* fs/fcntl.c */ 73 : : 74 : : /* fs/inotify_user.c */ 75 : 0 : COND_SYSCALL(inotify_init1); 76 : 0 : COND_SYSCALL(inotify_add_watch); 77 : 0 : COND_SYSCALL(inotify_rm_watch); 78 : : 79 : : /* fs/ioctl.c */ 80 : : 81 : : /* fs/ioprio.c */ 82 : 0 : COND_SYSCALL(ioprio_set); 83 : 0 : COND_SYSCALL(ioprio_get); 84 : : 85 : : /* fs/locks.c */ 86 : 0 : COND_SYSCALL(flock); 87 : : 88 : : /* fs/namei.c */ 89 : : 90 : : /* fs/namespace.c */ 91 : : 92 : : /* fs/nfsctl.c */ 93 : : 94 : : /* fs/open.c */ 95 : : 96 : : /* fs/pipe.c */ 97 : : 98 : : /* fs/quota.c */ 99 : 0 : COND_SYSCALL(quotactl); 100 : : 101 : : /* fs/readdir.c */ 102 : : 103 : : /* fs/read_write.c */ 104 : : 105 : : /* fs/sendfile.c */ 106 : : 107 : : /* fs/select.c */ 108 : : 109 : : /* fs/signalfd.c */ 110 : 0 : COND_SYSCALL(signalfd4); 111 : : COND_SYSCALL_COMPAT(signalfd4); 112 : : 113 : : /* fs/splice.c */ 114 : : 115 : : /* fs/stat.c */ 116 : : 117 : : /* fs/sync.c */ 118 : : 119 : : /* fs/timerfd.c */ 120 : 0 : COND_SYSCALL(timerfd_create); 121 : 0 : COND_SYSCALL(timerfd_settime); 122 : 0 : COND_SYSCALL(timerfd_settime32); 123 : 0 : COND_SYSCALL(timerfd_gettime); 124 : 0 : COND_SYSCALL(timerfd_gettime32); 125 : : 126 : : /* fs/utimes.c */ 127 : : 128 : : /* kernel/acct.c */ 129 : 0 : COND_SYSCALL(acct); 130 : : 131 : : /* kernel/capability.c */ 132 : 0 : COND_SYSCALL(capget); 133 : 0 : COND_SYSCALL(capset); 134 : : 135 : : /* kernel/exec_domain.c */ 136 : : 137 : : /* kernel/exit.c */ 138 : : 139 : : /* kernel/fork.c */ 140 : : /* __ARCH_WANT_SYS_CLONE3 */ 141 : 0 : COND_SYSCALL(clone3); 142 : : 143 : : /* kernel/futex.c */ 144 : 0 : COND_SYSCALL(futex); 145 : 0 : COND_SYSCALL(futex_time32); 146 : 0 : COND_SYSCALL(set_robust_list); 147 : : COND_SYSCALL_COMPAT(set_robust_list); 148 : 0 : COND_SYSCALL(get_robust_list); 149 : : COND_SYSCALL_COMPAT(get_robust_list); 150 : : 151 : : /* kernel/hrtimer.c */ 152 : : 153 : : /* kernel/itimer.c */ 154 : : 155 : : /* kernel/kexec.c */ 156 : 0 : COND_SYSCALL(kexec_load); 157 : : COND_SYSCALL_COMPAT(kexec_load); 158 : : 159 : : /* kernel/module.c */ 160 : 0 : COND_SYSCALL(init_module); 161 : 0 : COND_SYSCALL(delete_module); 162 : : 163 : : /* kernel/posix-timers.c */ 164 : : 165 : : /* kernel/printk.c */ 166 : 0 : COND_SYSCALL(syslog); 167 : : 168 : : /* kernel/ptrace.c */ 169 : : 170 : : /* kernel/sched/core.c */ 171 : : 172 : : /* kernel/sys.c */ 173 : 0 : COND_SYSCALL(setregid); 174 : 0 : COND_SYSCALL(setgid); 175 : 0 : COND_SYSCALL(setreuid); 176 : 0 : COND_SYSCALL(setuid); 177 : 0 : COND_SYSCALL(setresuid); 178 : 0 : COND_SYSCALL(getresuid); 179 : 0 : COND_SYSCALL(setresgid); 180 : 0 : COND_SYSCALL(getresgid); 181 : 0 : COND_SYSCALL(setfsuid); 182 : 0 : COND_SYSCALL(setfsgid); 183 : 0 : COND_SYSCALL(setgroups); 184 : 0 : COND_SYSCALL(getgroups); 185 : : 186 : : /* kernel/time.c */ 187 : : 188 : : /* kernel/timer.c */ 189 : : 190 : : /* ipc/mqueue.c */ 191 : 0 : COND_SYSCALL(mq_open); 192 : : COND_SYSCALL_COMPAT(mq_open); 193 : 0 : COND_SYSCALL(mq_unlink); 194 : 0 : COND_SYSCALL(mq_timedsend); 195 : 0 : COND_SYSCALL(mq_timedsend_time32); 196 : 0 : COND_SYSCALL(mq_timedreceive); 197 : 0 : COND_SYSCALL(mq_timedreceive_time32); 198 : 0 : COND_SYSCALL(mq_notify); 199 : : COND_SYSCALL_COMPAT(mq_notify); 200 : 0 : COND_SYSCALL(mq_getsetattr); 201 : : COND_SYSCALL_COMPAT(mq_getsetattr); 202 : : 203 : : /* ipc/msg.c */ 204 : 0 : COND_SYSCALL(msgget); 205 : 0 : COND_SYSCALL(old_msgctl); 206 : 0 : COND_SYSCALL(msgctl); 207 : : COND_SYSCALL_COMPAT(msgctl); 208 : : COND_SYSCALL_COMPAT(old_msgctl); 209 : 0 : COND_SYSCALL(msgrcv); 210 : : COND_SYSCALL_COMPAT(msgrcv); 211 : 0 : COND_SYSCALL(msgsnd); 212 : : COND_SYSCALL_COMPAT(msgsnd); 213 : : 214 : : /* ipc/sem.c */ 215 : 0 : COND_SYSCALL(semget); 216 : 0 : COND_SYSCALL(old_semctl); 217 : 0 : COND_SYSCALL(semctl); 218 : : COND_SYSCALL_COMPAT(semctl); 219 : : COND_SYSCALL_COMPAT(old_semctl); 220 : 0 : COND_SYSCALL(semtimedop); 221 : 0 : COND_SYSCALL(semtimedop_time32); 222 : 0 : COND_SYSCALL(semop); 223 : : 224 : : /* ipc/shm.c */ 225 : 0 : COND_SYSCALL(shmget); 226 : 0 : COND_SYSCALL(old_shmctl); 227 : 0 : COND_SYSCALL(shmctl); 228 : : COND_SYSCALL_COMPAT(shmctl); 229 : : COND_SYSCALL_COMPAT(old_shmctl); 230 : 0 : COND_SYSCALL(shmat); 231 : : COND_SYSCALL_COMPAT(shmat); 232 : 0 : COND_SYSCALL(shmdt); 233 : : 234 : : /* net/socket.c */ 235 : 0 : COND_SYSCALL(socket); 236 : 0 : COND_SYSCALL(socketpair); 237 : 0 : COND_SYSCALL(bind); 238 : 0 : COND_SYSCALL(listen); 239 : 0 : COND_SYSCALL(accept); 240 : 0 : COND_SYSCALL(connect); 241 : 0 : COND_SYSCALL(getsockname); 242 : 0 : COND_SYSCALL(getpeername); 243 : 0 : COND_SYSCALL(setsockopt); 244 : : COND_SYSCALL_COMPAT(setsockopt); 245 : 0 : COND_SYSCALL(getsockopt); 246 : : COND_SYSCALL_COMPAT(getsockopt); 247 : 0 : COND_SYSCALL(sendto); 248 : 0 : COND_SYSCALL(shutdown); 249 : 0 : COND_SYSCALL(recvfrom); 250 : : COND_SYSCALL_COMPAT(recvfrom); 251 : 0 : COND_SYSCALL(sendmsg); 252 : : COND_SYSCALL_COMPAT(sendmsg); 253 : 0 : COND_SYSCALL(recvmsg); 254 : : COND_SYSCALL_COMPAT(recvmsg); 255 : : 256 : : /* mm/filemap.c */ 257 : : 258 : : /* mm/nommu.c, also with MMU */ 259 : 0 : COND_SYSCALL(mremap); 260 : : 261 : : /* security/keys/keyctl.c */ 262 : 0 : COND_SYSCALL(add_key); 263 : 0 : COND_SYSCALL(request_key); 264 : 0 : COND_SYSCALL(keyctl); 265 : : COND_SYSCALL_COMPAT(keyctl); 266 : : 267 : : /* arch/example/kernel/sys_example.c */ 268 : : 269 : : /* mm/fadvise.c */ 270 : 0 : COND_SYSCALL(fadvise64_64); 271 : : 272 : : /* mm/, CONFIG_MMU only */ 273 : 0 : COND_SYSCALL(swapon); 274 : 0 : COND_SYSCALL(swapoff); 275 : 0 : COND_SYSCALL(mprotect); 276 : 0 : COND_SYSCALL(msync); 277 : 0 : COND_SYSCALL(mlock); 278 : 0 : COND_SYSCALL(munlock); 279 : 0 : COND_SYSCALL(mlockall); 280 : 0 : COND_SYSCALL(munlockall); 281 : 0 : COND_SYSCALL(mincore); 282 : 0 : COND_SYSCALL(madvise); 283 : 0 : COND_SYSCALL(remap_file_pages); 284 : 0 : COND_SYSCALL(mbind); 285 : : COND_SYSCALL_COMPAT(mbind); 286 : 0 : COND_SYSCALL(get_mempolicy); 287 : : COND_SYSCALL_COMPAT(get_mempolicy); 288 : 0 : COND_SYSCALL(set_mempolicy); 289 : : COND_SYSCALL_COMPAT(set_mempolicy); 290 : 0 : COND_SYSCALL(migrate_pages); 291 : : COND_SYSCALL_COMPAT(migrate_pages); 292 : 0 : COND_SYSCALL(move_pages); 293 : : COND_SYSCALL_COMPAT(move_pages); 294 : : 295 : 0 : COND_SYSCALL(perf_event_open); 296 : 0 : COND_SYSCALL(accept4); 297 : 0 : COND_SYSCALL(recvmmsg); 298 : 0 : COND_SYSCALL(recvmmsg_time32); 299 : : COND_SYSCALL_COMPAT(recvmmsg_time32); 300 : : COND_SYSCALL_COMPAT(recvmmsg_time64); 301 : : 302 : : /* 303 : : * Architecture specific syscalls: see further below 304 : : */ 305 : : 306 : : /* fanotify */ 307 : 0 : COND_SYSCALL(fanotify_init); 308 : 0 : COND_SYSCALL(fanotify_mark); 309 : : 310 : : /* open by handle */ 311 : 0 : COND_SYSCALL(name_to_handle_at); 312 : 0 : COND_SYSCALL(open_by_handle_at); 313 : : COND_SYSCALL_COMPAT(open_by_handle_at); 314 : : 315 : 0 : COND_SYSCALL(sendmmsg); 316 : : COND_SYSCALL_COMPAT(sendmmsg); 317 : 0 : COND_SYSCALL(process_vm_readv); 318 : : COND_SYSCALL_COMPAT(process_vm_readv); 319 : 0 : COND_SYSCALL(process_vm_writev); 320 : : COND_SYSCALL_COMPAT(process_vm_writev); 321 : : 322 : : /* compare kernel pointers */ 323 : 116 : COND_SYSCALL(kcmp); 324 : : 325 : 0 : COND_SYSCALL(finit_module); 326 : : 327 : : /* operate on Secure Computing state */ 328 : 0 : COND_SYSCALL(seccomp); 329 : : 330 : 0 : COND_SYSCALL(memfd_create); 331 : : 332 : : /* access BPF programs and maps */ 333 : 6 : COND_SYSCALL(bpf); 334 : : 335 : : /* execveat */ 336 : 0 : COND_SYSCALL(execveat); 337 : : 338 : 0 : COND_SYSCALL(userfaultfd); 339 : : 340 : : /* membarrier */ 341 : 0 : COND_SYSCALL(membarrier); 342 : : 343 : 0 : COND_SYSCALL(mlock2); 344 : : 345 : 0 : COND_SYSCALL(copy_file_range); 346 : : 347 : : /* memory protection keys */ 348 : 0 : COND_SYSCALL(pkey_mprotect); 349 : 0 : COND_SYSCALL(pkey_alloc); 350 : 0 : COND_SYSCALL(pkey_free); 351 : : 352 : : 353 : : /* 354 : : * Architecture specific weak syscall entries. 355 : : */ 356 : : 357 : : /* pciconfig: alpha, arm, arm64, ia64, sparc */ 358 : 0 : COND_SYSCALL(pciconfig_read); 359 : 0 : COND_SYSCALL(pciconfig_write); 360 : 0 : COND_SYSCALL(pciconfig_iobase); 361 : : 362 : : /* sys_socketcall: arm, mips, x86, ... */ 363 : 0 : COND_SYSCALL(socketcall); 364 : : COND_SYSCALL_COMPAT(socketcall); 365 : : 366 : : /* compat syscalls for arm64, x86, ... */ 367 : : COND_SYSCALL_COMPAT(sysctl); 368 : : COND_SYSCALL_COMPAT(fanotify_mark); 369 : : 370 : : /* x86 */ 371 : 0 : COND_SYSCALL(vm86old); 372 : 0 : COND_SYSCALL(modify_ldt); 373 : : COND_SYSCALL_COMPAT(quotactl32); 374 : 0 : COND_SYSCALL(vm86); 375 : 0 : COND_SYSCALL(kexec_file_load); 376 : : 377 : : /* s390 */ 378 : 0 : COND_SYSCALL(s390_pci_mmio_read); 379 : 0 : COND_SYSCALL(s390_pci_mmio_write); 380 : 0 : COND_SYSCALL(s390_ipc); 381 : : COND_SYSCALL_COMPAT(s390_ipc); 382 : : 383 : : /* powerpc */ 384 : 0 : COND_SYSCALL(rtas); 385 : 0 : COND_SYSCALL(spu_run); 386 : 0 : COND_SYSCALL(spu_create); 387 : 0 : COND_SYSCALL(subpage_prot); 388 : : 389 : : 390 : : /* 391 : : * Deprecated system calls which are still defined in 392 : : * include/uapi/asm-generic/unistd.h and wanted by >= 1 arch 393 : : */ 394 : : 395 : : /* __ARCH_WANT_SYSCALL_NO_FLAGS */ 396 : 0 : COND_SYSCALL(epoll_create); 397 : 0 : COND_SYSCALL(inotify_init); 398 : 0 : COND_SYSCALL(eventfd); 399 : 0 : COND_SYSCALL(signalfd); 400 : : COND_SYSCALL_COMPAT(signalfd); 401 : : 402 : : /* __ARCH_WANT_SYSCALL_OFF_T */ 403 : 0 : COND_SYSCALL(fadvise64); 404 : : 405 : : /* __ARCH_WANT_SYSCALL_DEPRECATED */ 406 : 0 : COND_SYSCALL(epoll_wait); 407 : 0 : COND_SYSCALL(recv); 408 : : COND_SYSCALL_COMPAT(recv); 409 : 0 : COND_SYSCALL(send); 410 : 0 : COND_SYSCALL(bdflush); 411 : 0 : COND_SYSCALL(uselib); 412 : : 413 : : /* optional: time32 */ 414 : 0 : COND_SYSCALL(time32); 415 : 0 : COND_SYSCALL(stime32); 416 : 0 : COND_SYSCALL(utime32); 417 : 0 : COND_SYSCALL(adjtimex_time32); 418 : 0 : COND_SYSCALL(sched_rr_get_interval_time32); 419 : 0 : COND_SYSCALL(nanosleep_time32); 420 : 0 : COND_SYSCALL(rt_sigtimedwait_time32); 421 : : COND_SYSCALL_COMPAT(rt_sigtimedwait_time32); 422 : 0 : COND_SYSCALL(timer_settime32); 423 : 0 : COND_SYSCALL(timer_gettime32); 424 : 0 : COND_SYSCALL(clock_settime32); 425 : 0 : COND_SYSCALL(clock_gettime32); 426 : 0 : COND_SYSCALL(clock_getres_time32); 427 : 0 : COND_SYSCALL(clock_nanosleep_time32); 428 : 0 : COND_SYSCALL(utimes_time32); 429 : 0 : COND_SYSCALL(futimesat_time32); 430 : 0 : COND_SYSCALL(pselect6_time32); 431 : : COND_SYSCALL_COMPAT(pselect6_time32); 432 : 0 : COND_SYSCALL(ppoll_time32); 433 : : COND_SYSCALL_COMPAT(ppoll_time32); 434 : 0 : COND_SYSCALL(utimensat_time32); 435 : 0 : COND_SYSCALL(clock_adjtime32); 436 : : 437 : : /* 438 : : * The syscalls below are not found in include/uapi/asm-generic/unistd.h 439 : : */ 440 : : 441 : : /* obsolete: SGETMASK_SYSCALL */ 442 : 0 : COND_SYSCALL(sgetmask); 443 : 0 : COND_SYSCALL(ssetmask); 444 : : 445 : : /* obsolete: SYSFS_SYSCALL */ 446 : 0 : COND_SYSCALL(sysfs); 447 : : 448 : : /* obsolete: __ARCH_WANT_SYS_IPC */ 449 : 0 : COND_SYSCALL(ipc); 450 : : COND_SYSCALL_COMPAT(ipc); 451 : : 452 : : /* obsolete: UID16 */ 453 : 0 : COND_SYSCALL(chown16); 454 : 0 : COND_SYSCALL(fchown16); 455 : 0 : COND_SYSCALL(getegid16); 456 : 0 : COND_SYSCALL(geteuid16); 457 : 0 : COND_SYSCALL(getgid16); 458 : 0 : COND_SYSCALL(getgroups16); 459 : 0 : COND_SYSCALL(getresgid16); 460 : 0 : COND_SYSCALL(getresuid16); 461 : 0 : COND_SYSCALL(getuid16); 462 : 0 : COND_SYSCALL(lchown16); 463 : 0 : COND_SYSCALL(setfsgid16); 464 : 0 : COND_SYSCALL(setfsuid16); 465 : 0 : COND_SYSCALL(setgid16); 466 : 0 : COND_SYSCALL(setgroups16); 467 : 0 : COND_SYSCALL(setregid16); 468 : 0 : COND_SYSCALL(setresgid16); 469 : 0 : COND_SYSCALL(setresuid16); 470 : 0 : COND_SYSCALL(setreuid16); 471 : 0 : COND_SYSCALL(setuid16); 472 : : 473 : : /* restartable sequence */ 474 : 0 : COND_SYSCALL(rseq);