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 : 3 : asmlinkage long sys_ni_syscall(void) 21 : : { 22 : 3 : 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 : : COND_SYSCALL(io_setup); 40 : : COND_SYSCALL_COMPAT(io_setup); 41 : : COND_SYSCALL(io_destroy); 42 : : COND_SYSCALL(io_submit); 43 : : COND_SYSCALL_COMPAT(io_submit); 44 : : COND_SYSCALL(io_cancel); 45 : : COND_SYSCALL(io_getevents_time32); 46 : : COND_SYSCALL(io_getevents); 47 : : COND_SYSCALL(io_pgetevents_time32); 48 : : COND_SYSCALL(io_pgetevents); 49 : : COND_SYSCALL_COMPAT(io_pgetevents_time32); 50 : : COND_SYSCALL_COMPAT(io_pgetevents); 51 : : COND_SYSCALL(io_uring_setup); 52 : : COND_SYSCALL(io_uring_enter); 53 : : COND_SYSCALL(io_uring_register); 54 : : 55 : : /* fs/xattr.c */ 56 : : 57 : : /* fs/dcache.c */ 58 : : 59 : : /* fs/cookies.c */ 60 : : COND_SYSCALL(lookup_dcookie); 61 : : COND_SYSCALL_COMPAT(lookup_dcookie); 62 : : 63 : : /* fs/eventfd.c */ 64 : : COND_SYSCALL(eventfd2); 65 : : 66 : : /* fs/eventfd.c */ 67 : : COND_SYSCALL(epoll_create1); 68 : : COND_SYSCALL(epoll_ctl); 69 : : COND_SYSCALL(epoll_pwait); 70 : : COND_SYSCALL_COMPAT(epoll_pwait); 71 : : 72 : : /* fs/fcntl.c */ 73 : : 74 : : /* fs/inotify_user.c */ 75 : : COND_SYSCALL(inotify_init1); 76 : : COND_SYSCALL(inotify_add_watch); 77 : : COND_SYSCALL(inotify_rm_watch); 78 : : 79 : : /* fs/ioctl.c */ 80 : : 81 : : /* fs/ioprio.c */ 82 : : COND_SYSCALL(ioprio_set); 83 : : COND_SYSCALL(ioprio_get); 84 : : 85 : : /* fs/locks.c */ 86 : : 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 : : 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 : : 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 : : COND_SYSCALL(timerfd_create); 121 : : COND_SYSCALL(timerfd_settime); 122 : : COND_SYSCALL(timerfd_settime32); 123 : : COND_SYSCALL(timerfd_gettime); 124 : : COND_SYSCALL(timerfd_gettime32); 125 : : 126 : : /* fs/utimes.c */ 127 : : 128 : : /* kernel/acct.c */ 129 : : COND_SYSCALL(acct); 130 : : 131 : : /* kernel/capability.c */ 132 : : COND_SYSCALL(capget); 133 : : 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 : : COND_SYSCALL(clone3); 142 : : 143 : : /* kernel/futex.c */ 144 : : COND_SYSCALL(futex); 145 : : COND_SYSCALL(futex_time32); 146 : : COND_SYSCALL(set_robust_list); 147 : : COND_SYSCALL_COMPAT(set_robust_list); 148 : : 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 : : COND_SYSCALL(kexec_load); 157 : : COND_SYSCALL_COMPAT(kexec_load); 158 : : 159 : : /* kernel/module.c */ 160 : : COND_SYSCALL(init_module); 161 : : COND_SYSCALL(delete_module); 162 : : 163 : : /* kernel/posix-timers.c */ 164 : : 165 : : /* kernel/printk.c */ 166 : : COND_SYSCALL(syslog); 167 : : 168 : : /* kernel/ptrace.c */ 169 : : 170 : : /* kernel/sched/core.c */ 171 : : 172 : : /* kernel/sys.c */ 173 : : COND_SYSCALL(setregid); 174 : : COND_SYSCALL(setgid); 175 : : COND_SYSCALL(setreuid); 176 : : COND_SYSCALL(setuid); 177 : : COND_SYSCALL(setresuid); 178 : : COND_SYSCALL(getresuid); 179 : : COND_SYSCALL(setresgid); 180 : : COND_SYSCALL(getresgid); 181 : : COND_SYSCALL(setfsuid); 182 : : COND_SYSCALL(setfsgid); 183 : : COND_SYSCALL(setgroups); 184 : : COND_SYSCALL(getgroups); 185 : : 186 : : /* kernel/time.c */ 187 : : 188 : : /* kernel/timer.c */ 189 : : 190 : : /* ipc/mqueue.c */ 191 : : COND_SYSCALL(mq_open); 192 : : COND_SYSCALL_COMPAT(mq_open); 193 : : COND_SYSCALL(mq_unlink); 194 : : COND_SYSCALL(mq_timedsend); 195 : : COND_SYSCALL(mq_timedsend_time32); 196 : : COND_SYSCALL(mq_timedreceive); 197 : : COND_SYSCALL(mq_timedreceive_time32); 198 : : COND_SYSCALL(mq_notify); 199 : : COND_SYSCALL_COMPAT(mq_notify); 200 : : COND_SYSCALL(mq_getsetattr); 201 : : COND_SYSCALL_COMPAT(mq_getsetattr); 202 : : 203 : : /* ipc/msg.c */ 204 : : COND_SYSCALL(msgget); 205 : : COND_SYSCALL(old_msgctl); 206 : : COND_SYSCALL(msgctl); 207 : : COND_SYSCALL_COMPAT(msgctl); 208 : : COND_SYSCALL_COMPAT(old_msgctl); 209 : : COND_SYSCALL(msgrcv); 210 : : COND_SYSCALL_COMPAT(msgrcv); 211 : : COND_SYSCALL(msgsnd); 212 : : COND_SYSCALL_COMPAT(msgsnd); 213 : : 214 : : /* ipc/sem.c */ 215 : : COND_SYSCALL(semget); 216 : : COND_SYSCALL(old_semctl); 217 : : COND_SYSCALL(semctl); 218 : : COND_SYSCALL_COMPAT(semctl); 219 : : COND_SYSCALL_COMPAT(old_semctl); 220 : : COND_SYSCALL(semtimedop); 221 : : COND_SYSCALL(semtimedop_time32); 222 : : COND_SYSCALL(semop); 223 : : 224 : : /* ipc/shm.c */ 225 : : COND_SYSCALL(shmget); 226 : : COND_SYSCALL(old_shmctl); 227 : : COND_SYSCALL(shmctl); 228 : : COND_SYSCALL_COMPAT(shmctl); 229 : : COND_SYSCALL_COMPAT(old_shmctl); 230 : : COND_SYSCALL(shmat); 231 : : COND_SYSCALL_COMPAT(shmat); 232 : : COND_SYSCALL(shmdt); 233 : : 234 : : /* net/socket.c */ 235 : : COND_SYSCALL(socket); 236 : : COND_SYSCALL(socketpair); 237 : : COND_SYSCALL(bind); 238 : : COND_SYSCALL(listen); 239 : : COND_SYSCALL(accept); 240 : : COND_SYSCALL(connect); 241 : : COND_SYSCALL(getsockname); 242 : : COND_SYSCALL(getpeername); 243 : : COND_SYSCALL(setsockopt); 244 : : COND_SYSCALL_COMPAT(setsockopt); 245 : : COND_SYSCALL(getsockopt); 246 : : COND_SYSCALL_COMPAT(getsockopt); 247 : : COND_SYSCALL(sendto); 248 : : COND_SYSCALL(shutdown); 249 : : COND_SYSCALL(recvfrom); 250 : : COND_SYSCALL_COMPAT(recvfrom); 251 : : COND_SYSCALL(sendmsg); 252 : : COND_SYSCALL_COMPAT(sendmsg); 253 : : COND_SYSCALL(recvmsg); 254 : : COND_SYSCALL_COMPAT(recvmsg); 255 : : 256 : : /* mm/filemap.c */ 257 : : 258 : : /* mm/nommu.c, also with MMU */ 259 : : COND_SYSCALL(mremap); 260 : : 261 : : /* security/keys/keyctl.c */ 262 : : COND_SYSCALL(add_key); 263 : : COND_SYSCALL(request_key); 264 : : COND_SYSCALL(keyctl); 265 : : COND_SYSCALL_COMPAT(keyctl); 266 : : 267 : : /* arch/example/kernel/sys_example.c */ 268 : : 269 : : /* mm/fadvise.c */ 270 : : COND_SYSCALL(fadvise64_64); 271 : : 272 : : /* mm/, CONFIG_MMU only */ 273 : : COND_SYSCALL(swapon); 274 : : COND_SYSCALL(swapoff); 275 : : COND_SYSCALL(mprotect); 276 : : COND_SYSCALL(msync); 277 : : COND_SYSCALL(mlock); 278 : : COND_SYSCALL(munlock); 279 : : COND_SYSCALL(mlockall); 280 : : COND_SYSCALL(munlockall); 281 : : COND_SYSCALL(mincore); 282 : : COND_SYSCALL(madvise); 283 : : COND_SYSCALL(remap_file_pages); 284 : : COND_SYSCALL(mbind); 285 : : COND_SYSCALL_COMPAT(mbind); 286 : : COND_SYSCALL(get_mempolicy); 287 : : COND_SYSCALL_COMPAT(get_mempolicy); 288 : : COND_SYSCALL(set_mempolicy); 289 : : COND_SYSCALL_COMPAT(set_mempolicy); 290 : : COND_SYSCALL(migrate_pages); 291 : : COND_SYSCALL_COMPAT(migrate_pages); 292 : : COND_SYSCALL(move_pages); 293 : : COND_SYSCALL_COMPAT(move_pages); 294 : : 295 : : COND_SYSCALL(perf_event_open); 296 : : COND_SYSCALL(accept4); 297 : : COND_SYSCALL(recvmmsg); 298 : : 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 : : COND_SYSCALL(fanotify_init); 308 : : COND_SYSCALL(fanotify_mark); 309 : : 310 : : /* open by handle */ 311 : : COND_SYSCALL(name_to_handle_at); 312 : : COND_SYSCALL(open_by_handle_at); 313 : : COND_SYSCALL_COMPAT(open_by_handle_at); 314 : : 315 : : COND_SYSCALL(sendmmsg); 316 : : COND_SYSCALL_COMPAT(sendmmsg); 317 : : COND_SYSCALL(process_vm_readv); 318 : : COND_SYSCALL_COMPAT(process_vm_readv); 319 : : COND_SYSCALL(process_vm_writev); 320 : : COND_SYSCALL_COMPAT(process_vm_writev); 321 : : 322 : : /* compare kernel pointers */ 323 : : COND_SYSCALL(kcmp); 324 : : 325 : : COND_SYSCALL(finit_module); 326 : : 327 : : /* operate on Secure Computing state */ 328 : : COND_SYSCALL(seccomp); 329 : : 330 : : COND_SYSCALL(memfd_create); 331 : : 332 : : /* access BPF programs and maps */ 333 : : COND_SYSCALL(bpf); 334 : : 335 : : /* execveat */ 336 : : COND_SYSCALL(execveat); 337 : : 338 : : COND_SYSCALL(userfaultfd); 339 : : 340 : : /* membarrier */ 341 : : COND_SYSCALL(membarrier); 342 : : 343 : : COND_SYSCALL(mlock2); 344 : : 345 : : COND_SYSCALL(copy_file_range); 346 : : 347 : : /* memory protection keys */ 348 : : COND_SYSCALL(pkey_mprotect); 349 : : COND_SYSCALL(pkey_alloc); 350 : : COND_SYSCALL(pkey_free); 351 : : 352 : : 353 : : /* 354 : : * Architecture specific weak syscall entries. 355 : : */ 356 : : 357 : : /* pciconfig: alpha, arm, arm64, ia64, sparc */ 358 : : COND_SYSCALL(pciconfig_read); 359 : : COND_SYSCALL(pciconfig_write); 360 : : COND_SYSCALL(pciconfig_iobase); 361 : : 362 : : /* sys_socketcall: arm, mips, x86, ... */ 363 : : 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 : : COND_SYSCALL(vm86old); 372 : : COND_SYSCALL(modify_ldt); 373 : : COND_SYSCALL_COMPAT(quotactl32); 374 : : COND_SYSCALL(vm86); 375 : : COND_SYSCALL(kexec_file_load); 376 : : 377 : : /* s390 */ 378 : : COND_SYSCALL(s390_pci_mmio_read); 379 : : COND_SYSCALL(s390_pci_mmio_write); 380 : : COND_SYSCALL(s390_ipc); 381 : : COND_SYSCALL_COMPAT(s390_ipc); 382 : : 383 : : /* powerpc */ 384 : : COND_SYSCALL(rtas); 385 : : COND_SYSCALL(spu_run); 386 : : COND_SYSCALL(spu_create); 387 : : 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 : : COND_SYSCALL(epoll_create); 397 : : COND_SYSCALL(inotify_init); 398 : : COND_SYSCALL(eventfd); 399 : : COND_SYSCALL(signalfd); 400 : : COND_SYSCALL_COMPAT(signalfd); 401 : : 402 : : /* __ARCH_WANT_SYSCALL_OFF_T */ 403 : : COND_SYSCALL(fadvise64); 404 : : 405 : : /* __ARCH_WANT_SYSCALL_DEPRECATED */ 406 : : COND_SYSCALL(epoll_wait); 407 : : COND_SYSCALL(recv); 408 : : COND_SYSCALL_COMPAT(recv); 409 : : COND_SYSCALL(send); 410 : : COND_SYSCALL(bdflush); 411 : : COND_SYSCALL(uselib); 412 : : 413 : : 414 : : /* 415 : : * The syscalls below are not found in include/uapi/asm-generic/unistd.h 416 : : */ 417 : : 418 : : /* obsolete: SGETMASK_SYSCALL */ 419 : : COND_SYSCALL(sgetmask); 420 : : COND_SYSCALL(ssetmask); 421 : : 422 : : /* obsolete: SYSFS_SYSCALL */ 423 : : COND_SYSCALL(sysfs); 424 : : 425 : : /* obsolete: __ARCH_WANT_SYS_IPC */ 426 : : COND_SYSCALL(ipc); 427 : : COND_SYSCALL_COMPAT(ipc); 428 : : 429 : : /* obsolete: UID16 */ 430 : : COND_SYSCALL(chown16); 431 : : COND_SYSCALL(fchown16); 432 : : COND_SYSCALL(getegid16); 433 : : COND_SYSCALL(geteuid16); 434 : : COND_SYSCALL(getgid16); 435 : : COND_SYSCALL(getgroups16); 436 : : COND_SYSCALL(getresgid16); 437 : : COND_SYSCALL(getresuid16); 438 : : COND_SYSCALL(getuid16); 439 : : COND_SYSCALL(lchown16); 440 : : COND_SYSCALL(setfsgid16); 441 : : COND_SYSCALL(setfsuid16); 442 : : COND_SYSCALL(setgid16); 443 : : COND_SYSCALL(setgroups16); 444 : : COND_SYSCALL(setregid16); 445 : : COND_SYSCALL(setresgid16); 446 : : COND_SYSCALL(setresuid16); 447 : : COND_SYSCALL(setreuid16); 448 : : COND_SYSCALL(setuid16); 449 : : 450 : : /* restartable sequence */ 451 : : COND_SYSCALL(rseq);