Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'y2038-syscall-cleanup' of git://git.kernel.org:/pub/scm/linux/kernel/git/arnd/playground into timers/2038

Pull preparatory work for y2038 changes from Arnd Bergmann:

System call unification and cleanup

The system call tables have diverged a bit over the years, and a number of
the recent additions never made it into all architectures, for one reason
or another.

This is an attempt to clean it up as far as we can without breaking
compatibility, doing a number of steps:

- Add system calls that have not yet been integrated into all architectures
but that we definitely want there. This includes {,f}statfs64() and
get{eg,eu,g,p,u,pp}id() on alpha, which have been missing traditionally.

- The s390 compat syscall handling is cleaned up to be more like what we
do on other architectures, while keeping the 31-bit pointer
extension. This was merged as a shared branch by the s390 maintainers
and is included here in order to base the other patches on top.

- Add the separate ipc syscalls on all architectures that traditionally
only had sys_ipc(). This version is done without support for IPC_OLD
that is we have in sys_ipc. The new semtimedop_time64 syscall will only
be added here, not in sys_ipc

- Add syscall numbers for a couple of syscalls that we probably don't need
everywhere, in particular pkey_* and rseq, for the purpose of symmetry:
if it's in asm-generic/unistd.h, it makes sense to have it everywhere. I
expect that any future system calls will get assigned on all platforms
together, even when they appear to be specific to a single architecture.

- Prepare for having the same system call numbers for any future calls. In
combination with the generated tables, this hopefully makes it easier to
add new calls across all architectures together.

All of the above are technically separate from the y2038 work, but are done
as preparation before we add the new 64-bit time_t system calls everywhere,
providing a common baseline set of system calls.

I expect that glibc and other libraries that want to use 64-bit time_t will
require linux-5.1 kernel headers for building in the future, and at a much
later point may also require linux-5.1 or a later version as the minimum
kernel at runtime. Having a common baseline then allows the removal of many
architecture or kernel version specific workarounds.

+608 -1118
-21
arch/alpha/include/asm/unistd.h
··· 19 19 #define __ARCH_WANT_SYS_VFORK 20 20 #define __ARCH_WANT_SYS_CLONE 21 21 22 - /* 23 - * Ignore legacy syscalls that we don't use. 24 - */ 25 - #define __IGNORE_alarm 26 - #define __IGNORE_creat 27 - #define __IGNORE_getegid 28 - #define __IGNORE_geteuid 29 - #define __IGNORE_getgid 30 - #define __IGNORE_getpid 31 - #define __IGNORE_getppid 32 - #define __IGNORE_getuid 33 - #define __IGNORE_pause 34 - #define __IGNORE_time 35 - #define __IGNORE_utime 36 - #define __IGNORE_umount2 37 - 38 - /* Alpha doesn't have protection keys. */ 39 - #define __IGNORE_pkey_mprotect 40 - #define __IGNORE_pkey_alloc 41 - #define __IGNORE_pkey_free 42 - 43 22 #endif /* _ALPHA_UNISTD_H */
+10
arch/alpha/include/uapi/asm/unistd.h
··· 2 2 #ifndef _UAPI_ALPHA_UNISTD_H 3 3 #define _UAPI_ALPHA_UNISTD_H 4 4 5 + /* These are traditionally the names linux-alpha uses for 6 + * the two otherwise generic system calls */ 7 + #define __NR_umount __NR_umount2 8 + #define __NR_osf_shmat __NR_shmat 9 + 10 + /* These return an extra value but can be used as aliases */ 11 + #define __NR_getpid __NR_getxpid 12 + #define __NR_getuid __NR_getxuid 13 + #define __NR_getgid __NR_getxgid 14 + 5 15 #include <asm/unistd_32.h> 6 16 7 17 #endif /* _UAPI_ALPHA_UNISTD_H */
+15 -5
arch/alpha/kernel/syscalls/syscall.tbl
··· 29 29 19 common lseek sys_lseek 30 30 20 common getxpid sys_getxpid 31 31 21 common osf_mount sys_osf_mount 32 - 22 common umount sys_umount 32 + 22 common umount2 sys_umount 33 33 23 common setuid sys_setuid 34 34 24 common getxuid sys_getxuid 35 35 25 common exec_with_loader sys_ni_syscall ··· 174 174 187 common osf_alt_sigpending sys_ni_syscall 175 175 188 common osf_alt_setsid sys_ni_syscall 176 176 199 common osf_swapon sys_swapon 177 - 200 common msgctl sys_msgctl 177 + 200 common msgctl sys_old_msgctl 178 178 201 common msgget sys_msgget 179 179 202 common msgrcv sys_msgrcv 180 180 203 common msgsnd sys_msgsnd 181 - 204 common semctl sys_semctl 181 + 204 common semctl sys_old_semctl 182 182 205 common semget sys_semget 183 183 206 common semop sys_semop 184 184 207 common osf_utsname sys_osf_utsname 185 185 208 common lchown sys_lchown 186 - 209 common osf_shmat sys_shmat 187 - 210 common shmctl sys_shmctl 186 + 209 common shmat sys_shmat 187 + 210 common shmctl sys_old_shmctl 188 188 211 common shmdt sys_shmdt 189 189 212 common shmget sys_shmget 190 190 213 common osf_mvalid sys_ni_syscall ··· 451 451 520 common preadv2 sys_preadv2 452 452 521 common pwritev2 sys_pwritev2 453 453 522 common statx sys_statx 454 + 523 common io_pgetevents sys_io_pgetevents 455 + 524 common pkey_mprotect sys_pkey_mprotect 456 + 525 common pkey_alloc sys_pkey_alloc 457 + 526 common pkey_free sys_pkey_free 458 + 527 common rseq sys_rseq 459 + 528 common statfs64 sys_statfs64 460 + 529 common fstatfs64 sys_fstatfs64 461 + 530 common getegid sys_getegid 462 + 531 common geteuid sys_geteuid 463 + 532 common getppid sys_getppid
-1
arch/arm/include/asm/unistd.h
··· 45 45 * Unimplemented (or alternatively implemented) syscalls 46 46 */ 47 47 #define __IGNORE_fadvise64_64 48 - #define __IGNORE_migrate_pages 49 48 50 49 #ifdef __ARM_EABI__ 51 50 /*
+5 -3
arch/arm/tools/syscall.tbl
··· 314 314 297 common recvmsg sys_recvmsg 315 315 298 common semop sys_semop sys_oabi_semop 316 316 299 common semget sys_semget 317 - 300 common semctl sys_semctl 317 + 300 common semctl sys_old_semctl 318 318 301 common msgsnd sys_msgsnd 319 319 302 common msgrcv sys_msgrcv 320 320 303 common msgget sys_msgget 321 - 304 common msgctl sys_msgctl 321 + 304 common msgctl sys_old_msgctl 322 322 305 common shmat sys_shmat 323 323 306 common shmdt sys_shmdt 324 324 307 common shmget sys_shmget 325 - 308 common shmctl sys_shmctl 325 + 308 common shmctl sys_old_shmctl 326 326 309 common add_key sys_add_key 327 327 310 common request_key sys_request_key 328 328 311 common keyctl sys_keyctl ··· 414 414 397 common statx sys_statx 415 415 398 common rseq sys_rseq 416 416 399 common io_pgetevents sys_io_pgetevents 417 + 400 common migrate_pages sys_migrate_pages 418 + 401 common kexec_file_load sys_kexec_file_load
+1 -1
arch/arm64/include/asm/unistd.h
··· 44 44 #define __ARM_NR_compat_set_tls (__ARM_NR_COMPAT_BASE + 5) 45 45 #define __ARM_NR_COMPAT_END (__ARM_NR_COMPAT_BASE + 0x800) 46 46 47 - #define __NR_compat_syscalls 400 47 + #define __NR_compat_syscalls 402 48 48 #endif 49 49 50 50 #define __ARCH_WANT_SYS_CLONE
+7 -3
arch/arm64/include/asm/unistd32.h
··· 622 622 #define __NR_semget 299 623 623 __SYSCALL(__NR_semget, sys_semget) 624 624 #define __NR_semctl 300 625 - __SYSCALL(__NR_semctl, compat_sys_semctl) 625 + __SYSCALL(__NR_semctl, compat_sys_old_semctl) 626 626 #define __NR_msgsnd 301 627 627 __SYSCALL(__NR_msgsnd, compat_sys_msgsnd) 628 628 #define __NR_msgrcv 302 ··· 630 630 #define __NR_msgget 303 631 631 __SYSCALL(__NR_msgget, sys_msgget) 632 632 #define __NR_msgctl 304 633 - __SYSCALL(__NR_msgctl, compat_sys_msgctl) 633 + __SYSCALL(__NR_msgctl, compat_sys_old_msgctl) 634 634 #define __NR_shmat 305 635 635 __SYSCALL(__NR_shmat, compat_sys_shmat) 636 636 #define __NR_shmdt 306 ··· 638 638 #define __NR_shmget 307 639 639 __SYSCALL(__NR_shmget, sys_shmget) 640 640 #define __NR_shmctl 308 641 - __SYSCALL(__NR_shmctl, compat_sys_shmctl) 641 + __SYSCALL(__NR_shmctl, compat_sys_old_shmctl) 642 642 #define __NR_add_key 309 643 643 __SYSCALL(__NR_add_key, sys_add_key) 644 644 #define __NR_request_key 310 ··· 821 821 __SYSCALL(__NR_rseq, sys_rseq) 822 822 #define __NR_io_pgetevents 399 823 823 __SYSCALL(__NR_io_pgetevents, compat_sys_io_pgetevents) 824 + #define __NR_migrate_pages 400 825 + __SYSCALL(__NR_migrate_pages, compat_sys_migrate_pages) 826 + #define __NR_kexec_file_load 401 827 + __SYSCALL(__NR_kexec_file_load, sys_kexec_file_load) 824 828 825 829 /* 826 830 * Please add new compat syscalls above this comment and update
-14
arch/ia64/include/asm/unistd.h
··· 12 12 13 13 #define NR_syscalls __NR_syscalls /* length of syscall table */ 14 14 15 - /* 16 - * The following defines stop scripts/checksyscalls.sh from complaining about 17 - * unimplemented system calls. Glibc provides for each of these by using 18 - * more modern equivalent system calls. 19 - */ 20 - #define __IGNORE_fork /* clone() */ 21 - #define __IGNORE_time /* gettimeofday() */ 22 - #define __IGNORE_alarm /* setitimer(ITIMER_REAL, ... */ 23 - #define __IGNORE_pause /* rt_sigprocmask(), rt_sigsuspend() */ 24 - #define __IGNORE_utime /* utimes() */ 25 - #define __IGNORE_getpgrp /* getpgid() */ 26 - #define __IGNORE_vfork /* clone() */ 27 - #define __IGNORE_umount2 /* umount() */ 28 - 29 15 #define __ARCH_WANT_NEW_STAT 30 16 #define __ARCH_WANT_SYS_UTIME 31 17
+2
arch/ia64/include/uapi/asm/unistd.h
··· 15 15 16 16 #define __NR_Linux 1024 17 17 18 + #define __NR_umount __NR_umount2 19 + 18 20 #include <asm/unistd_64.h> 19 21 20 22 #endif /* _UAPI_ASM_IA64_UNISTD_H */
+9 -1
arch/ia64/kernel/syscalls/syscall.tbl
··· 29 29 17 common getpid sys_getpid 30 30 18 common getppid sys_getppid 31 31 19 common mount sys_mount 32 - 20 common umount sys_umount 32 + 20 common umount2 sys_umount 33 33 21 common setuid sys_setuid 34 34 22 common getuid sys_getuid 35 35 23 common geteuid sys_geteuid ··· 335 335 323 common copy_file_range sys_copy_file_range 336 336 324 common preadv2 sys_preadv2 337 337 325 common pwritev2 sys_pwritev2 338 + 326 common statx sys_statx 339 + 327 common io_pgetevents sys_io_pgetevents 340 + 328 common perf_event_open sys_perf_event_open 341 + 329 common seccomp sys_seccomp 342 + 330 common pkey_mprotect sys_pkey_mprotect 343 + 331 common pkey_alloc sys_pkey_alloc 344 + 332 common pkey_free sys_pkey_free 345 + 333 common rseq sys_rseq
+16
arch/m68k/kernel/syscalls/syscall.tbl
··· 387 387 377 common preadv2 sys_preadv2 388 388 378 common pwritev2 sys_pwritev2 389 389 379 common statx sys_statx 390 + 380 common seccomp sys_seccomp 391 + 381 common pkey_mprotect sys_pkey_mprotect 392 + 382 common pkey_alloc sys_pkey_alloc 393 + 383 common pkey_free sys_pkey_free 394 + 384 common rseq sys_rseq 395 + # room for arch specific calls 396 + 393 common semget sys_semget 397 + 394 common semctl sys_semctl 398 + 395 common shmget sys_shmget 399 + 396 common shmctl sys_shmctl 400 + 397 common shmat sys_shmat 401 + 398 common shmdt sys_shmdt 402 + 399 common msgget sys_msgget 403 + 400 common msgsnd sys_msgsnd 404 + 401 common msgrcv sys_msgrcv 405 + 402 common msgctl sys_msgctl
+3 -3
arch/microblaze/kernel/syscalls/syscall.tbl
··· 335 335 325 common semtimedop sys_semtimedop 336 336 326 common timerfd_settime sys_timerfd_settime 337 337 327 common timerfd_gettime sys_timerfd_gettime 338 - 328 common semctl sys_semctl 338 + 328 common semctl sys_old_semctl 339 339 329 common semget sys_semget 340 340 330 common semop sys_semop 341 - 331 common msgctl sys_msgctl 341 + 331 common msgctl sys_old_msgctl 342 342 332 common msgget sys_msgget 343 343 333 common msgrcv sys_msgrcv 344 344 334 common msgsnd sys_msgsnd 345 345 335 common shmat sys_shmat 346 - 336 common shmctl sys_shmctl 346 + 336 common shmctl sys_old_shmctl 347 347 337 common shmdt sys_shmdt 348 348 338 common shmget sys_shmget 349 349 339 common signalfd4 sys_signalfd4
-13
arch/mips/include/asm/unistd.h
··· 54 54 #define __ARCH_WANT_SYS_CLONE 55 55 56 56 /* whitelists for checksyscalls */ 57 - #define __IGNORE_select 58 - #define __IGNORE_vfork 59 - #define __IGNORE_time 60 - #define __IGNORE_uselib 61 57 #define __IGNORE_fadvise64_64 62 - #define __IGNORE_getdents64 63 - #if _MIPS_SIM == _MIPS_SIM_NABI32 64 - #define __IGNORE_truncate64 65 - #define __IGNORE_ftruncate64 66 - #define __IGNORE_stat64 67 - #define __IGNORE_lstat64 68 - #define __IGNORE_fstat64 69 - #define __IGNORE_fstatat64 70 - #endif 71 58 72 59 #endif /* !__ASSEMBLY__ */ 73 60
+3 -3
arch/mips/kernel/syscalls/syscall_n32.tbl
··· 37 37 27 n32 madvise sys_madvise 38 38 28 n32 shmget sys_shmget 39 39 29 n32 shmat sys_shmat 40 - 30 n32 shmctl compat_sys_shmctl 40 + 30 n32 shmctl compat_sys_old_shmctl 41 41 31 n32 dup sys_dup 42 42 32 n32 dup2 sys_dup2 43 43 33 n32 pause sys_pause ··· 71 71 61 n32 uname sys_newuname 72 72 62 n32 semget sys_semget 73 73 63 n32 semop sys_semop 74 - 64 n32 semctl compat_sys_semctl 74 + 64 n32 semctl compat_sys_old_semctl 75 75 65 n32 shmdt sys_shmdt 76 76 66 n32 msgget sys_msgget 77 77 67 n32 msgsnd compat_sys_msgsnd 78 78 68 n32 msgrcv compat_sys_msgrcv 79 - 69 n32 msgctl compat_sys_msgctl 79 + 69 n32 msgctl compat_sys_old_msgctl 80 80 70 n32 fcntl compat_sys_fcntl 81 81 71 n32 flock sys_flock 82 82 72 n32 fsync sys_fsync
+3 -3
arch/mips/kernel/syscalls/syscall_n64.tbl
··· 37 37 27 n64 madvise sys_madvise 38 38 28 n64 shmget sys_shmget 39 39 29 n64 shmat sys_shmat 40 - 30 n64 shmctl sys_shmctl 40 + 30 n64 shmctl sys_old_shmctl 41 41 31 n64 dup sys_dup 42 42 32 n64 dup2 sys_dup2 43 43 33 n64 pause sys_pause ··· 71 71 61 n64 uname sys_newuname 72 72 62 n64 semget sys_semget 73 73 63 n64 semop sys_semop 74 - 64 n64 semctl sys_semctl 74 + 64 n64 semctl sys_old_semctl 75 75 65 n64 shmdt sys_shmdt 76 76 66 n64 msgget sys_msgget 77 77 67 n64 msgsnd sys_msgsnd 78 78 68 n64 msgrcv sys_msgrcv 79 - 69 n64 msgctl sys_msgctl 79 + 69 n64 msgctl sys_old_msgctl 80 80 70 n64 fcntl sys_fcntl 81 81 71 n64 flock sys_flock 82 82 72 n64 fsync sys_fsync
+11
arch/mips/kernel/syscalls/syscall_o32.tbl
··· 380 380 366 o32 statx sys_statx 381 381 367 o32 rseq sys_rseq 382 382 368 o32 io_pgetevents sys_io_pgetevents compat_sys_io_pgetevents 383 + # room for arch specific calls 384 + 393 o32 semget sys_semget 385 + 394 o32 semctl sys_semctl compat_sys_semctl 386 + 395 o32 shmget sys_shmget 387 + 396 o32 shmctl sys_shmctl compat_sys_shmctl 388 + 397 o32 shmat sys_shmat compat_sys_shmat 389 + 398 o32 shmdt sys_shmdt 390 + 399 o32 msgget sys_msgget 391 + 400 o32 msgsnd sys_msgsnd compat_sys_msgsnd 392 + 401 o32 msgrcv sys_msgrcv compat_sys_msgrcv 393 + 402 o32 msgctl sys_msgctl compat_sys_msgctl
-4
arch/parisc/include/asm/unistd.h
··· 10 10 11 11 #define SYS_ify(syscall_name) __NR_##syscall_name 12 12 13 - #define __IGNORE_select /* newselect */ 14 13 #define __IGNORE_fadvise64 /* fadvise64_64 */ 15 - #define __IGNORE_pkey_mprotect 16 - #define __IGNORE_pkey_alloc 17 - #define __IGNORE_pkey_free 18 14 19 15 #ifndef ASM_LINE_SEP 20 16 # define ASM_LINE_SEP ;
+4
arch/parisc/kernel/syscalls/syscall.tbl
··· 367 367 348 common pwritev2 sys_pwritev2 compat_sys_pwritev2 368 368 349 common statx sys_statx 369 369 350 common io_pgetevents sys_io_pgetevents compat_sys_io_pgetevents 370 + 351 common pkey_mprotect sys_pkey_mprotect 371 + 352 common pkey_alloc sys_pkey_alloc 372 + 353 common pkey_free sys_pkey_free 373 + 354 common rseq sys_rseq
+13
arch/powerpc/kernel/syscalls/syscall.tbl
··· 414 414 363 spu switch_endian sys_ni_syscall 415 415 364 common userfaultfd sys_userfaultfd 416 416 365 common membarrier sys_membarrier 417 + # 366-377 originally left for IPC, now unused 417 418 378 nospu mlock2 sys_mlock2 418 419 379 nospu copy_file_range sys_copy_file_range 419 420 380 common preadv2 sys_preadv2 compat_sys_preadv2 ··· 426 425 386 nospu pkey_mprotect sys_pkey_mprotect 427 426 387 nospu rseq sys_rseq 428 427 388 nospu io_pgetevents sys_io_pgetevents compat_sys_io_pgetevents 428 + # room for arch specific syscalls 429 + 392 64 semtimedop sys_semtimedop 430 + 393 common semget sys_semget 431 + 394 common semctl sys_semctl compat_sys_semctl 432 + 395 common shmget sys_shmget 433 + 396 common shmctl sys_shmctl compat_sys_shmctl 434 + 397 common shmat sys_shmat compat_sys_shmat 435 + 398 common shmdt sys_shmdt 436 + 399 common msgget sys_msgget 437 + 400 common msgsnd sys_msgsnd compat_sys_msgsnd 438 + 401 common msgrcv sys_msgrcv compat_sys_msgrcv 439 + 402 common msgctl sys_msgctl compat_sys_msgctl
+2
arch/s390/Kconfig
··· 75 75 select ARCH_HAS_SET_MEMORY 76 76 select ARCH_HAS_STRICT_KERNEL_RWX 77 77 select ARCH_HAS_STRICT_MODULE_RWX 78 + select ARCH_HAS_SYSCALL_WRAPPER 78 79 select ARCH_HAS_UBSAN_SANITIZE_ALL 79 80 select ARCH_HAVE_NMI_SAFE_CMPXCHG 80 81 select ARCH_INLINE_READ_LOCK ··· 380 379 select COMPAT_BINFMT_ELF if BINFMT_ELF 381 380 select ARCH_WANT_OLD_COMPAT_IPC 382 381 select COMPAT_OLD_SIGACTION 382 + select HAVE_UID16 383 383 depends on MULTIUSER 384 384 help 385 385 Select this option if you want to enable your system kernel to
+135
arch/s390/include/asm/syscall_wrapper.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 */ 2 + /* 3 + * syscall_wrapper.h - s390 specific wrappers to syscall definitions 4 + * 5 + */ 6 + 7 + #ifndef _ASM_S390_SYSCALL_WRAPPER_H 8 + #define _ASM_S390_SYSCALL_WRAPPER_H 9 + 10 + #ifdef CONFIG_COMPAT 11 + #define __SC_COMPAT_TYPE(t, a) \ 12 + __typeof(__builtin_choose_expr(sizeof(t) > 4, 0L, (t)0)) a 13 + 14 + #define __SC_COMPAT_CAST(t, a) \ 15 + ({ \ 16 + long __ReS = a; \ 17 + \ 18 + BUILD_BUG_ON((sizeof(t) > 4) && !__TYPE_IS_L(t) && \ 19 + !__TYPE_IS_UL(t) && !__TYPE_IS_PTR(t) && \ 20 + !__TYPE_IS_LL(t)); \ 21 + if (__TYPE_IS_L(t)) \ 22 + __ReS = (s32)a; \ 23 + if (__TYPE_IS_UL(t)) \ 24 + __ReS = (u32)a; \ 25 + if (__TYPE_IS_PTR(t)) \ 26 + __ReS = a & 0x7fffffff; \ 27 + if (__TYPE_IS_LL(t)) \ 28 + return -ENOSYS; \ 29 + (t)__ReS; \ 30 + }) 31 + 32 + #define __S390_SYS_STUBx(x, name, ...) \ 33 + asmlinkage long __s390_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__))\ 34 + ALLOW_ERROR_INJECTION(__s390_sys##name, ERRNO); \ 35 + asmlinkage long __s390_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__))\ 36 + { \ 37 + long ret = __s390x_sys##name(__MAP(x,__SC_COMPAT_CAST,__VA_ARGS__));\ 38 + __MAP(x,__SC_TEST,__VA_ARGS__); \ 39 + return ret; \ 40 + } 41 + 42 + /* 43 + * To keep the naming coherent, re-define SYSCALL_DEFINE0 to create an alias 44 + * named __s390x_sys_*() 45 + */ 46 + #define COMPAT_SYSCALL_DEFINE0(sname) \ 47 + SYSCALL_METADATA(_##sname, 0); \ 48 + asmlinkage long __s390_compat_sys_##sname(void); \ 49 + ALLOW_ERROR_INJECTION(__s390_compat__sys_##sname, ERRNO); \ 50 + asmlinkage long __s390_compat_sys_##sname(void) 51 + 52 + #define SYSCALL_DEFINE0(sname) \ 53 + SYSCALL_METADATA(_##sname, 0); \ 54 + asmlinkage long __s390x_sys_##sname(void); \ 55 + ALLOW_ERROR_INJECTION(__s390x_sys_##sname, ERRNO); \ 56 + asmlinkage long __s390_sys_##sname(void) \ 57 + __attribute__((alias(__stringify(__s390x_sys_##sname)))); \ 58 + asmlinkage long __s390x_sys_##sname(void) 59 + 60 + #define COND_SYSCALL(name) \ 61 + cond_syscall(__s390x_sys_##name); \ 62 + cond_syscall(__s390_sys_##name) 63 + 64 + #define SYS_NI(name) \ 65 + SYSCALL_ALIAS(__s390x_sys_##name, sys_ni_posix_timers); \ 66 + SYSCALL_ALIAS(__s390_sys_##name, sys_ni_posix_timers) 67 + 68 + #define COMPAT_SYSCALL_DEFINEx(x, name, ...) \ 69 + __diag_push(); \ 70 + __diag_ignore(GCC, 8, "-Wattribute-alias", \ 71 + "Type aliasing is used to sanitize syscall arguments");\ 72 + asmlinkage long __s390_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \ 73 + asmlinkage long __s390_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) \ 74 + __attribute__((alias(__stringify(__se_compat_sys##name)))); \ 75 + ALLOW_ERROR_INJECTION(compat_sys##name, ERRNO); \ 76 + static inline long __do_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));\ 77 + asmlinkage long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \ 78 + asmlinkage long __se_compat_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \ 79 + { \ 80 + long ret = __do_compat_sys##name(__MAP(x,__SC_DELOUSE,__VA_ARGS__));\ 81 + __MAP(x,__SC_TEST,__VA_ARGS__); \ 82 + return ret; \ 83 + } \ 84 + __diag_pop(); \ 85 + static inline long __do_compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) 86 + 87 + /* 88 + * As some compat syscalls may not be implemented, we need to expand 89 + * COND_SYSCALL_COMPAT in kernel/sys_ni.c and COMPAT_SYS_NI in 90 + * kernel/time/posix-stubs.c to cover this case as well. 91 + */ 92 + #define COND_SYSCALL_COMPAT(name) \ 93 + cond_syscall(__s390_compat_sys_##name) 94 + 95 + #define COMPAT_SYS_NI(name) \ 96 + SYSCALL_ALIAS(__s390_compat_sys_##name, sys_ni_posix_timers) 97 + 98 + #else /* CONFIG_COMPAT */ 99 + 100 + #define __S390_SYS_STUBx(x, fullname, name, ...) 101 + 102 + #define SYSCALL_DEFINE0(sname) \ 103 + SYSCALL_METADATA(_##sname, 0); \ 104 + asmlinkage long __s390x_sys_##sname(void); \ 105 + ALLOW_ERROR_INJECTION(__s390x_sys_##sname, ERRNO); \ 106 + asmlinkage long __s390x_sys_##sname(void) 107 + 108 + #define COND_SYSCALL(name) \ 109 + cond_syscall(__s390x_sys_##name) 110 + 111 + #define SYS_NI(name) \ 112 + SYSCALL_ALIAS(__s390x_sys_##name, sys_ni_posix_timers); 113 + 114 + #endif /* CONFIG_COMPAT */ 115 + 116 + #define __SYSCALL_DEFINEx(x, name, ...) \ 117 + __diag_push(); \ 118 + __diag_ignore(GCC, 8, "-Wattribute-alias", \ 119 + "Type aliasing is used to sanitize syscall arguments");\ 120 + asmlinkage long __s390x_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) \ 121 + __attribute__((alias(__stringify(__se_sys##name)))); \ 122 + ALLOW_ERROR_INJECTION(__s390x_sys##name, ERRNO); \ 123 + static long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \ 124 + static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \ 125 + __S390_SYS_STUBx(x, name, __VA_ARGS__) \ 126 + asmlinkage long __se_sys##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \ 127 + { \ 128 + long ret = __do_sys##name(__MAP(x,__SC_CAST,__VA_ARGS__)); \ 129 + __MAP(x,__SC_TEST,__VA_ARGS__); \ 130 + return ret; \ 131 + } \ 132 + __diag_pop(); \ 133 + static inline long __do_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) 134 + 135 + #endif /* _ASM_X86_SYSCALL_WRAPPER_H */
-5
arch/s390/include/asm/unistd.h
··· 10 10 #include <uapi/asm/unistd.h> 11 11 #include <asm/unistd_nr.h> 12 12 13 - #define __IGNORE_time 14 - #define __IGNORE_pkey_mprotect 15 - #define __IGNORE_pkey_alloc 16 - #define __IGNORE_pkey_free 17 - 18 13 #define __ARCH_WANT_NEW_STAT 19 14 #define __ARCH_WANT_OLD_READDIR 20 15 #define __ARCH_WANT_SYS_ALARM
+6
arch/s390/include/uapi/asm/posix_types.h
··· 20 20 typedef unsigned short __kernel_old_dev_t; 21 21 #define __kernel_old_dev_t __kernel_old_dev_t 22 22 23 + #ifdef __KERNEL__ 24 + typedef unsigned short __kernel_old_uid_t; 25 + typedef unsigned short __kernel_old_gid_t; 26 + #define __kernel_old_uid_t __kernel_old_uid_t 27 + #endif 28 + 23 29 #ifndef __s390x__ 24 30 25 31 typedef unsigned long __kernel_ino_t;
+1 -1
arch/s390/kernel/Makefile
··· 65 65 obj-$(CONFIG_AUDIT) += audit.o 66 66 compat-obj-$(CONFIG_AUDIT) += compat_audit.o 67 67 obj-$(CONFIG_COMPAT) += compat_linux.o compat_signal.o 68 - obj-$(CONFIG_COMPAT) += compat_wrapper.o $(compat-obj-y) 68 + obj-$(CONFIG_COMPAT) += $(compat-obj-y) 69 69 obj-$(CONFIG_EARLY_PRINTK) += early_printk.o 70 70 obj-$(CONFIG_STACKTRACE) += stacktrace.o 71 71 obj-$(CONFIG_KPROBES) += kprobes.o
+1 -234
arch/s390/kernel/compat_linux.c
··· 34 34 #include <linux/stat.h> 35 35 #include <linux/filter.h> 36 36 #include <linux/highmem.h> 37 - #include <linux/highuid.h> 38 37 #include <linux/mman.h> 39 38 #include <linux/ipv6.h> 40 39 #include <linux/in.h> ··· 57 58 58 59 #include "compat_linux.h" 59 60 60 - /* For this source file, we want overflow handling. */ 61 - 62 - #undef high2lowuid 63 - #undef high2lowgid 64 - #undef low2highuid 65 - #undef low2highgid 66 - #undef SET_UID16 67 - #undef SET_GID16 68 - #undef NEW_TO_OLD_UID 69 - #undef NEW_TO_OLD_GID 70 - #undef SET_OLDSTAT_UID 71 - #undef SET_OLDSTAT_GID 72 - #undef SET_STAT_UID 73 - #undef SET_STAT_GID 74 - 75 - #define high2lowuid(uid) ((uid) > 65535) ? (u16)overflowuid : (u16)(uid) 76 - #define high2lowgid(gid) ((gid) > 65535) ? (u16)overflowgid : (u16)(gid) 77 - #define low2highuid(uid) ((uid) == (u16)-1) ? (uid_t)-1 : (uid_t)(uid) 78 - #define low2highgid(gid) ((gid) == (u16)-1) ? (gid_t)-1 : (gid_t)(gid) 79 - #define SET_UID16(var, uid) var = high2lowuid(uid) 80 - #define SET_GID16(var, gid) var = high2lowgid(gid) 81 - #define NEW_TO_OLD_UID(uid) high2lowuid(uid) 82 - #define NEW_TO_OLD_GID(gid) high2lowgid(gid) 83 - #define SET_OLDSTAT_UID(stat, uid) (stat).st_uid = high2lowuid(uid) 84 - #define SET_OLDSTAT_GID(stat, gid) (stat).st_gid = high2lowgid(gid) 85 - #define SET_STAT_UID(stat, uid) (stat).st_uid = high2lowuid(uid) 86 - #define SET_STAT_GID(stat, gid) (stat).st_gid = high2lowgid(gid) 87 - 88 - COMPAT_SYSCALL_DEFINE3(s390_chown16, const char __user *, filename, 89 - u16, user, u16, group) 90 - { 91 - return ksys_chown(filename, low2highuid(user), low2highgid(group)); 92 - } 93 - 94 - COMPAT_SYSCALL_DEFINE3(s390_lchown16, const char __user *, 95 - filename, u16, user, u16, group) 96 - { 97 - return ksys_lchown(filename, low2highuid(user), low2highgid(group)); 98 - } 99 - 100 - COMPAT_SYSCALL_DEFINE3(s390_fchown16, unsigned int, fd, u16, user, u16, group) 101 - { 102 - return ksys_fchown(fd, low2highuid(user), low2highgid(group)); 103 - } 104 - 105 - COMPAT_SYSCALL_DEFINE2(s390_setregid16, u16, rgid, u16, egid) 106 - { 107 - return sys_setregid(low2highgid(rgid), low2highgid(egid)); 108 - } 109 - 110 - COMPAT_SYSCALL_DEFINE1(s390_setgid16, u16, gid) 111 - { 112 - return sys_setgid(low2highgid(gid)); 113 - } 114 - 115 - COMPAT_SYSCALL_DEFINE2(s390_setreuid16, u16, ruid, u16, euid) 116 - { 117 - return sys_setreuid(low2highuid(ruid), low2highuid(euid)); 118 - } 119 - 120 - COMPAT_SYSCALL_DEFINE1(s390_setuid16, u16, uid) 121 - { 122 - return sys_setuid(low2highuid(uid)); 123 - } 124 - 125 - COMPAT_SYSCALL_DEFINE3(s390_setresuid16, u16, ruid, u16, euid, u16, suid) 126 - { 127 - return sys_setresuid(low2highuid(ruid), low2highuid(euid), 128 - low2highuid(suid)); 129 - } 130 - 131 - COMPAT_SYSCALL_DEFINE3(s390_getresuid16, u16 __user *, ruidp, 132 - u16 __user *, euidp, u16 __user *, suidp) 133 - { 134 - const struct cred *cred = current_cred(); 135 - int retval; 136 - u16 ruid, euid, suid; 137 - 138 - ruid = high2lowuid(from_kuid_munged(cred->user_ns, cred->uid)); 139 - euid = high2lowuid(from_kuid_munged(cred->user_ns, cred->euid)); 140 - suid = high2lowuid(from_kuid_munged(cred->user_ns, cred->suid)); 141 - 142 - if (!(retval = put_user(ruid, ruidp)) && 143 - !(retval = put_user(euid, euidp))) 144 - retval = put_user(suid, suidp); 145 - 146 - return retval; 147 - } 148 - 149 - COMPAT_SYSCALL_DEFINE3(s390_setresgid16, u16, rgid, u16, egid, u16, sgid) 150 - { 151 - return sys_setresgid(low2highgid(rgid), low2highgid(egid), 152 - low2highgid(sgid)); 153 - } 154 - 155 - COMPAT_SYSCALL_DEFINE3(s390_getresgid16, u16 __user *, rgidp, 156 - u16 __user *, egidp, u16 __user *, sgidp) 157 - { 158 - const struct cred *cred = current_cred(); 159 - int retval; 160 - u16 rgid, egid, sgid; 161 - 162 - rgid = high2lowgid(from_kgid_munged(cred->user_ns, cred->gid)); 163 - egid = high2lowgid(from_kgid_munged(cred->user_ns, cred->egid)); 164 - sgid = high2lowgid(from_kgid_munged(cred->user_ns, cred->sgid)); 165 - 166 - if (!(retval = put_user(rgid, rgidp)) && 167 - !(retval = put_user(egid, egidp))) 168 - retval = put_user(sgid, sgidp); 169 - 170 - return retval; 171 - } 172 - 173 - COMPAT_SYSCALL_DEFINE1(s390_setfsuid16, u16, uid) 174 - { 175 - return sys_setfsuid(low2highuid(uid)); 176 - } 177 - 178 - COMPAT_SYSCALL_DEFINE1(s390_setfsgid16, u16, gid) 179 - { 180 - return sys_setfsgid(low2highgid(gid)); 181 - } 182 - 183 - static int groups16_to_user(u16 __user *grouplist, struct group_info *group_info) 184 - { 185 - struct user_namespace *user_ns = current_user_ns(); 186 - int i; 187 - u16 group; 188 - kgid_t kgid; 189 - 190 - for (i = 0; i < group_info->ngroups; i++) { 191 - kgid = group_info->gid[i]; 192 - group = (u16)from_kgid_munged(user_ns, kgid); 193 - if (put_user(group, grouplist+i)) 194 - return -EFAULT; 195 - } 196 - 197 - return 0; 198 - } 199 - 200 - static int groups16_from_user(struct group_info *group_info, u16 __user *grouplist) 201 - { 202 - struct user_namespace *user_ns = current_user_ns(); 203 - int i; 204 - u16 group; 205 - kgid_t kgid; 206 - 207 - for (i = 0; i < group_info->ngroups; i++) { 208 - if (get_user(group, grouplist+i)) 209 - return -EFAULT; 210 - 211 - kgid = make_kgid(user_ns, (gid_t)group); 212 - if (!gid_valid(kgid)) 213 - return -EINVAL; 214 - 215 - group_info->gid[i] = kgid; 216 - } 217 - 218 - return 0; 219 - } 220 - 221 - COMPAT_SYSCALL_DEFINE2(s390_getgroups16, int, gidsetsize, u16 __user *, grouplist) 222 - { 223 - const struct cred *cred = current_cred(); 224 - int i; 225 - 226 - if (gidsetsize < 0) 227 - return -EINVAL; 228 - 229 - get_group_info(cred->group_info); 230 - i = cred->group_info->ngroups; 231 - if (gidsetsize) { 232 - if (i > gidsetsize) { 233 - i = -EINVAL; 234 - goto out; 235 - } 236 - if (groups16_to_user(grouplist, cred->group_info)) { 237 - i = -EFAULT; 238 - goto out; 239 - } 240 - } 241 - out: 242 - put_group_info(cred->group_info); 243 - return i; 244 - } 245 - 246 - COMPAT_SYSCALL_DEFINE2(s390_setgroups16, int, gidsetsize, u16 __user *, grouplist) 247 - { 248 - struct group_info *group_info; 249 - int retval; 250 - 251 - if (!may_setgroups()) 252 - return -EPERM; 253 - if ((unsigned)gidsetsize > NGROUPS_MAX) 254 - return -EINVAL; 255 - 256 - group_info = groups_alloc(gidsetsize); 257 - if (!group_info) 258 - return -ENOMEM; 259 - retval = groups16_from_user(group_info, grouplist); 260 - if (retval) { 261 - put_group_info(group_info); 262 - return retval; 263 - } 264 - 265 - groups_sort(group_info); 266 - retval = set_current_groups(group_info); 267 - put_group_info(group_info); 268 - 269 - return retval; 270 - } 271 - 272 - COMPAT_SYSCALL_DEFINE0(s390_getuid16) 273 - { 274 - return high2lowuid(from_kuid_munged(current_user_ns(), current_uid())); 275 - } 276 - 277 - COMPAT_SYSCALL_DEFINE0(s390_geteuid16) 278 - { 279 - return high2lowuid(from_kuid_munged(current_user_ns(), current_euid())); 280 - } 281 - 282 - COMPAT_SYSCALL_DEFINE0(s390_getgid16) 283 - { 284 - return high2lowgid(from_kgid_munged(current_user_ns(), current_gid())); 285 - } 286 - 287 - COMPAT_SYSCALL_DEFINE0(s390_getegid16) 288 - { 289 - return high2lowgid(from_kgid_munged(current_user_ns(), current_egid())); 290 - } 291 - 292 61 #ifdef CONFIG_SYSVIPC 293 62 COMPAT_SYSCALL_DEFINE5(s390_ipc, uint, call, int, first, compat_ulong_t, second, 294 63 compat_ulong_t, third, compat_uptr_t, ptr) 295 64 { 296 65 if (call >> 16) /* hack for backward compatibility */ 297 66 return -EINVAL; 298 - return compat_sys_ipc(call, first, second, third, ptr, third); 67 + return compat_ksys_ipc(call, first, second, third, ptr, third); 299 68 } 300 69 #endif 301 70
-186
arch/s390/kernel/compat_wrapper.c
··· 1 - // SPDX-License-Identifier: GPL-2.0 2 - /* 3 - * Compat system call wrappers. 4 - * 5 - * Copyright IBM Corp. 2014 6 - */ 7 - 8 - #include <linux/syscalls.h> 9 - #include <linux/compat.h> 10 - #include "entry.h" 11 - 12 - #define COMPAT_SYSCALL_WRAP1(name, ...) \ 13 - COMPAT_SYSCALL_WRAPx(1, _##name, __VA_ARGS__) 14 - #define COMPAT_SYSCALL_WRAP2(name, ...) \ 15 - COMPAT_SYSCALL_WRAPx(2, _##name, __VA_ARGS__) 16 - #define COMPAT_SYSCALL_WRAP3(name, ...) \ 17 - COMPAT_SYSCALL_WRAPx(3, _##name, __VA_ARGS__) 18 - #define COMPAT_SYSCALL_WRAP4(name, ...) \ 19 - COMPAT_SYSCALL_WRAPx(4, _##name, __VA_ARGS__) 20 - #define COMPAT_SYSCALL_WRAP5(name, ...) \ 21 - COMPAT_SYSCALL_WRAPx(5, _##name, __VA_ARGS__) 22 - #define COMPAT_SYSCALL_WRAP6(name, ...) \ 23 - COMPAT_SYSCALL_WRAPx(6, _##name, __VA_ARGS__) 24 - 25 - #define __SC_COMPAT_TYPE(t, a) \ 26 - __typeof(__builtin_choose_expr(sizeof(t) > 4, 0L, (t)0)) a 27 - 28 - #define __SC_COMPAT_CAST(t, a) \ 29 - ({ \ 30 - long __ReS = a; \ 31 - \ 32 - BUILD_BUG_ON((sizeof(t) > 4) && !__TYPE_IS_L(t) && \ 33 - !__TYPE_IS_UL(t) && !__TYPE_IS_PTR(t)); \ 34 - if (__TYPE_IS_L(t)) \ 35 - __ReS = (s32)a; \ 36 - if (__TYPE_IS_UL(t)) \ 37 - __ReS = (u32)a; \ 38 - if (__TYPE_IS_PTR(t)) \ 39 - __ReS = a & 0x7fffffff; \ 40 - (t)__ReS; \ 41 - }) 42 - 43 - /* 44 - * The COMPAT_SYSCALL_WRAP macro generates system call wrappers to be used by 45 - * compat tasks. These wrappers will only be used for system calls where only 46 - * the system call arguments need sign or zero extension or zeroing of the upper 47 - * 33 bits of pointers. 48 - * Note: since the wrapper function will afterwards call a system call which 49 - * again performs zero and sign extension for all system call arguments with 50 - * a size of less than eight bytes, these compat wrappers only touch those 51 - * system call arguments with a size of eight bytes ((unsigned) long and 52 - * pointers). Zero and sign extension for e.g. int parameters will be done by 53 - * the regular system call wrappers. 54 - */ 55 - #define COMPAT_SYSCALL_WRAPx(x, name, ...) \ 56 - asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \ 57 - asmlinkage long notrace compat_sys##name(__MAP(x,__SC_COMPAT_TYPE,__VA_ARGS__));\ 58 - asmlinkage long notrace compat_sys##name(__MAP(x,__SC_COMPAT_TYPE,__VA_ARGS__)) \ 59 - { \ 60 - return sys##name(__MAP(x,__SC_COMPAT_CAST,__VA_ARGS__)); \ 61 - } 62 - 63 - COMPAT_SYSCALL_WRAP2(creat, const char __user *, pathname, umode_t, mode); 64 - COMPAT_SYSCALL_WRAP2(link, const char __user *, oldname, const char __user *, newname); 65 - COMPAT_SYSCALL_WRAP1(unlink, const char __user *, pathname); 66 - COMPAT_SYSCALL_WRAP1(chdir, const char __user *, filename); 67 - COMPAT_SYSCALL_WRAP3(mknod, const char __user *, filename, umode_t, mode, unsigned, dev); 68 - COMPAT_SYSCALL_WRAP2(chmod, const char __user *, filename, umode_t, mode); 69 - COMPAT_SYSCALL_WRAP1(oldumount, char __user *, name); 70 - COMPAT_SYSCALL_WRAP2(access, const char __user *, filename, int, mode); 71 - COMPAT_SYSCALL_WRAP2(rename, const char __user *, oldname, const char __user *, newname); 72 - COMPAT_SYSCALL_WRAP2(mkdir, const char __user *, pathname, umode_t, mode); 73 - COMPAT_SYSCALL_WRAP1(rmdir, const char __user *, pathname); 74 - COMPAT_SYSCALL_WRAP1(pipe, int __user *, fildes); 75 - COMPAT_SYSCALL_WRAP1(brk, unsigned long, brk); 76 - COMPAT_SYSCALL_WRAP2(signal, int, sig, __sighandler_t, handler); 77 - COMPAT_SYSCALL_WRAP1(acct, const char __user *, name); 78 - COMPAT_SYSCALL_WRAP2(umount, char __user *, name, int, flags); 79 - COMPAT_SYSCALL_WRAP1(chroot, const char __user *, filename); 80 - COMPAT_SYSCALL_WRAP3(sigsuspend, int, unused1, int, unused2, old_sigset_t, mask); 81 - COMPAT_SYSCALL_WRAP2(sethostname, char __user *, name, int, len); 82 - COMPAT_SYSCALL_WRAP2(symlink, const char __user *, old, const char __user *, new); 83 - COMPAT_SYSCALL_WRAP3(readlink, const char __user *, path, char __user *, buf, int, bufsiz); 84 - COMPAT_SYSCALL_WRAP1(uselib, const char __user *, library); 85 - COMPAT_SYSCALL_WRAP2(swapon, const char __user *, specialfile, int, swap_flags); 86 - COMPAT_SYSCALL_WRAP4(reboot, int, magic1, int, magic2, unsigned int, cmd, void __user *, arg); 87 - COMPAT_SYSCALL_WRAP2(munmap, unsigned long, addr, size_t, len); 88 - COMPAT_SYSCALL_WRAP3(syslog, int, type, char __user *, buf, int, len); 89 - COMPAT_SYSCALL_WRAP1(swapoff, const char __user *, specialfile); 90 - COMPAT_SYSCALL_WRAP2(setdomainname, char __user *, name, int, len); 91 - COMPAT_SYSCALL_WRAP1(newuname, struct new_utsname __user *, name); 92 - COMPAT_SYSCALL_WRAP3(mprotect, unsigned long, start, size_t, len, unsigned long, prot); 93 - COMPAT_SYSCALL_WRAP3(init_module, void __user *, umod, unsigned long, len, const char __user *, uargs); 94 - COMPAT_SYSCALL_WRAP2(delete_module, const char __user *, name_user, unsigned int, flags); 95 - COMPAT_SYSCALL_WRAP4(quotactl, unsigned int, cmd, const char __user *, special, qid_t, id, void __user *, addr); 96 - COMPAT_SYSCALL_WRAP2(bdflush, int, func, long, data); 97 - COMPAT_SYSCALL_WRAP3(sysfs, int, option, unsigned long, arg1, unsigned long, arg2); 98 - COMPAT_SYSCALL_WRAP5(llseek, unsigned int, fd, unsigned long, high, unsigned long, low, loff_t __user *, result, unsigned int, whence); 99 - COMPAT_SYSCALL_WRAP3(msync, unsigned long, start, size_t, len, int, flags); 100 - COMPAT_SYSCALL_WRAP2(mlock, unsigned long, start, size_t, len); 101 - COMPAT_SYSCALL_WRAP2(munlock, unsigned long, start, size_t, len); 102 - COMPAT_SYSCALL_WRAP2(sched_setparam, pid_t, pid, struct sched_param __user *, param); 103 - COMPAT_SYSCALL_WRAP2(sched_getparam, pid_t, pid, struct sched_param __user *, param); 104 - COMPAT_SYSCALL_WRAP3(sched_setscheduler, pid_t, pid, int, policy, struct sched_param __user *, param); 105 - COMPAT_SYSCALL_WRAP5(mremap, unsigned long, addr, unsigned long, old_len, unsigned long, new_len, unsigned long, flags, unsigned long, new_addr); 106 - COMPAT_SYSCALL_WRAP3(poll, struct pollfd __user *, ufds, unsigned int, nfds, int, timeout); 107 - COMPAT_SYSCALL_WRAP5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, unsigned long, arg4, unsigned long, arg5); 108 - COMPAT_SYSCALL_WRAP2(getcwd, char __user *, buf, unsigned long, size); 109 - COMPAT_SYSCALL_WRAP2(capget, cap_user_header_t, header, cap_user_data_t, dataptr); 110 - COMPAT_SYSCALL_WRAP2(capset, cap_user_header_t, header, const cap_user_data_t, data); 111 - COMPAT_SYSCALL_WRAP3(lchown, const char __user *, filename, uid_t, user, gid_t, group); 112 - COMPAT_SYSCALL_WRAP2(getgroups, int, gidsetsize, gid_t __user *, grouplist); 113 - COMPAT_SYSCALL_WRAP2(setgroups, int, gidsetsize, gid_t __user *, grouplist); 114 - COMPAT_SYSCALL_WRAP3(getresuid, uid_t __user *, ruid, uid_t __user *, euid, uid_t __user *, suid); 115 - COMPAT_SYSCALL_WRAP3(getresgid, gid_t __user *, rgid, gid_t __user *, egid, gid_t __user *, sgid); 116 - COMPAT_SYSCALL_WRAP3(chown, const char __user *, filename, uid_t, user, gid_t, group); 117 - COMPAT_SYSCALL_WRAP2(pivot_root, const char __user *, new_root, const char __user *, put_old); 118 - COMPAT_SYSCALL_WRAP3(mincore, unsigned long, start, size_t, len, unsigned char __user *, vec); 119 - COMPAT_SYSCALL_WRAP3(madvise, unsigned long, start, size_t, len, int, behavior); 120 - COMPAT_SYSCALL_WRAP5(setxattr, const char __user *, path, const char __user *, name, const void __user *, value, size_t, size, int, flags); 121 - COMPAT_SYSCALL_WRAP5(lsetxattr, const char __user *, path, const char __user *, name, const void __user *, value, size_t, size, int, flags); 122 - COMPAT_SYSCALL_WRAP5(fsetxattr, int, fd, const char __user *, name, const void __user *, value, size_t, size, int, flags); 123 - COMPAT_SYSCALL_WRAP3(getdents64, unsigned int, fd, struct linux_dirent64 __user *, dirent, unsigned int, count); 124 - COMPAT_SYSCALL_WRAP4(getxattr, const char __user *, path, const char __user *, name, void __user *, value, size_t, size); 125 - COMPAT_SYSCALL_WRAP4(lgetxattr, const char __user *, path, const char __user *, name, void __user *, value, size_t, size); 126 - COMPAT_SYSCALL_WRAP4(fgetxattr, int, fd, const char __user *, name, void __user *, value, size_t, size); 127 - COMPAT_SYSCALL_WRAP3(listxattr, const char __user *, path, char __user *, list, size_t, size); 128 - COMPAT_SYSCALL_WRAP3(llistxattr, const char __user *, path, char __user *, list, size_t, size); 129 - COMPAT_SYSCALL_WRAP3(flistxattr, int, fd, char __user *, list, size_t, size); 130 - COMPAT_SYSCALL_WRAP2(removexattr, const char __user *, path, const char __user *, name); 131 - COMPAT_SYSCALL_WRAP2(lremovexattr, const char __user *, path, const char __user *, name); 132 - COMPAT_SYSCALL_WRAP2(fremovexattr, int, fd, const char __user *, name); 133 - COMPAT_SYSCALL_WRAP1(set_tid_address, int __user *, tidptr); 134 - COMPAT_SYSCALL_WRAP4(epoll_ctl, int, epfd, int, op, int, fd, struct epoll_event __user *, event); 135 - COMPAT_SYSCALL_WRAP4(epoll_wait, int, epfd, struct epoll_event __user *, events, int, maxevents, int, timeout); 136 - COMPAT_SYSCALL_WRAP1(io_destroy, aio_context_t, ctx); 137 - COMPAT_SYSCALL_WRAP3(io_cancel, aio_context_t, ctx_id, struct iocb __user *, iocb, struct io_event __user *, result); 138 - COMPAT_SYSCALL_WRAP1(mq_unlink, const char __user *, name); 139 - COMPAT_SYSCALL_WRAP5(add_key, const char __user *, tp, const char __user *, dsc, const void __user *, pld, size_t, len, key_serial_t, id); 140 - COMPAT_SYSCALL_WRAP4(request_key, const char __user *, tp, const char __user *, dsc, const char __user *, info, key_serial_t, id); 141 - COMPAT_SYSCALL_WRAP5(remap_file_pages, unsigned long, start, unsigned long, size, unsigned long, prot, unsigned long, pgoff, unsigned long, flags); 142 - COMPAT_SYSCALL_WRAP3(inotify_add_watch, int, fd, const char __user *, path, u32, mask); 143 - COMPAT_SYSCALL_WRAP3(mkdirat, int, dfd, const char __user *, pathname, umode_t, mode); 144 - COMPAT_SYSCALL_WRAP4(mknodat, int, dfd, const char __user *, filename, umode_t, mode, unsigned, dev); 145 - COMPAT_SYSCALL_WRAP5(fchownat, int, dfd, const char __user *, filename, uid_t, user, gid_t, group, int, flag); 146 - COMPAT_SYSCALL_WRAP3(unlinkat, int, dfd, const char __user *, pathname, int, flag); 147 - COMPAT_SYSCALL_WRAP4(renameat, int, olddfd, const char __user *, oldname, int, newdfd, const char __user *, newname); 148 - COMPAT_SYSCALL_WRAP5(linkat, int, olddfd, const char __user *, oldname, int, newdfd, const char __user *, newname, int, flags); 149 - COMPAT_SYSCALL_WRAP3(symlinkat, const char __user *, oldname, int, newdfd, const char __user *, newname); 150 - COMPAT_SYSCALL_WRAP4(readlinkat, int, dfd, const char __user *, path, char __user *, buf, int, bufsiz); 151 - COMPAT_SYSCALL_WRAP3(fchmodat, int, dfd, const char __user *, filename, umode_t, mode); 152 - COMPAT_SYSCALL_WRAP3(faccessat, int, dfd, const char __user *, filename, int, mode); 153 - COMPAT_SYSCALL_WRAP1(unshare, unsigned long, unshare_flags); 154 - COMPAT_SYSCALL_WRAP6(splice, int, fd_in, loff_t __user *, off_in, int, fd_out, loff_t __user *, off_out, size_t, len, unsigned int, flags); 155 - COMPAT_SYSCALL_WRAP4(tee, int, fdin, int, fdout, size_t, len, unsigned int, flags); 156 - COMPAT_SYSCALL_WRAP3(getcpu, unsigned __user *, cpu, unsigned __user *, node, struct getcpu_cache __user *, cache); 157 - COMPAT_SYSCALL_WRAP2(pipe2, int __user *, fildes, int, flags); 158 - COMPAT_SYSCALL_WRAP5(perf_event_open, struct perf_event_attr __user *, attr_uptr, pid_t, pid, int, cpu, int, group_fd, unsigned long, flags); 159 - COMPAT_SYSCALL_WRAP5(clone, unsigned long, newsp, unsigned long, clone_flags, int __user *, parent_tidptr, int __user *, child_tidptr, unsigned long, tls); 160 - COMPAT_SYSCALL_WRAP4(prlimit64, pid_t, pid, unsigned int, resource, const struct rlimit64 __user *, new_rlim, struct rlimit64 __user *, old_rlim); 161 - COMPAT_SYSCALL_WRAP5(name_to_handle_at, int, dfd, const char __user *, name, struct file_handle __user *, handle, int __user *, mnt_id, int, flag); 162 - COMPAT_SYSCALL_WRAP5(kcmp, pid_t, pid1, pid_t, pid2, int, type, unsigned long, idx1, unsigned long, idx2); 163 - COMPAT_SYSCALL_WRAP3(finit_module, int, fd, const char __user *, uargs, int, flags); 164 - COMPAT_SYSCALL_WRAP3(sched_setattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, flags); 165 - COMPAT_SYSCALL_WRAP4(sched_getattr, pid_t, pid, struct sched_attr __user *, attr, unsigned int, size, unsigned int, flags); 166 - COMPAT_SYSCALL_WRAP5(renameat2, int, olddfd, const char __user *, oldname, int, newdfd, const char __user *, newname, unsigned int, flags); 167 - COMPAT_SYSCALL_WRAP3(seccomp, unsigned int, op, unsigned int, flags, void __user *, uargs) 168 - COMPAT_SYSCALL_WRAP3(getrandom, char __user *, buf, size_t, count, unsigned int, flags) 169 - COMPAT_SYSCALL_WRAP2(memfd_create, const char __user *, uname, unsigned int, flags) 170 - COMPAT_SYSCALL_WRAP3(bpf, int, cmd, union bpf_attr *, attr, unsigned int, size); 171 - COMPAT_SYSCALL_WRAP3(s390_pci_mmio_write, const unsigned long, mmio_addr, const void __user *, user_buffer, const size_t, length); 172 - COMPAT_SYSCALL_WRAP3(s390_pci_mmio_read, const unsigned long, mmio_addr, void __user *, user_buffer, const size_t, length); 173 - COMPAT_SYSCALL_WRAP4(socketpair, int, family, int, type, int, protocol, int __user *, usockvec); 174 - COMPAT_SYSCALL_WRAP3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen); 175 - COMPAT_SYSCALL_WRAP3(connect, int, fd, struct sockaddr __user *, uservaddr, int, addrlen); 176 - COMPAT_SYSCALL_WRAP4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr, int __user *, upeer_addrlen, int, flags); 177 - COMPAT_SYSCALL_WRAP3(getsockname, int, fd, struct sockaddr __user *, usockaddr, int __user *, usockaddr_len); 178 - COMPAT_SYSCALL_WRAP3(getpeername, int, fd, struct sockaddr __user *, usockaddr, int __user *, usockaddr_len); 179 - COMPAT_SYSCALL_WRAP6(sendto, int, fd, void __user *, buff, size_t, len, unsigned int, flags, struct sockaddr __user *, addr, int, addr_len); 180 - COMPAT_SYSCALL_WRAP3(mlock2, unsigned long, start, size_t, len, int, flags); 181 - COMPAT_SYSCALL_WRAP6(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); 182 - COMPAT_SYSCALL_WRAP2(s390_guarded_storage, int, command, struct gs_cb *, gs_cb); 183 - COMPAT_SYSCALL_WRAP5(statx, int, dfd, const char __user *, path, unsigned, flags, unsigned, mask, struct statx __user *, buffer); 184 - COMPAT_SYSCALL_WRAP4(s390_sthyi, unsigned long, code, void __user *, info, u64 __user *, rc, unsigned long, flags); 185 - COMPAT_SYSCALL_WRAP5(kexec_file_load, int, kernel_fd, int, initrd_fd, unsigned long, cmdline_len, const char __user *, cmdline_ptr, unsigned long, flags) 186 - COMPAT_SYSCALL_WRAP4(rseq, struct rseq __user *, rseq, u32, rseq_len, int, flags, u32, sig)
+2 -2
arch/s390/kernel/entry.S
··· 1512 1512 .quad .Lsie_skip - .Lsie_entry 1513 1513 #endif 1514 1514 .section .rodata, "a" 1515 - #define SYSCALL(esame,emu) .long esame 1515 + #define SYSCALL(esame,emu) .long __s390x_ ## esame 1516 1516 .globl sys_call_table 1517 1517 sys_call_table: 1518 1518 #include "asm/syscall_table.h" ··· 1520 1520 1521 1521 #ifdef CONFIG_COMPAT 1522 1522 1523 - #define SYSCALL(esame,emu) .long emu 1523 + #define SYSCALL(esame,emu) .long __s390_ ## emu 1524 1524 .globl sys_call_table_emu 1525 1525 sys_call_table_emu: 1526 1526 #include "asm/syscall_table.h"
+13 -3
arch/s390/kernel/sys_s390.c
··· 58 58 return error; 59 59 } 60 60 61 + #ifdef CONFIG_SYSVIPC 61 62 /* 62 63 * sys_ipc() is the de-multiplexer for the SysV IPC calls. 63 64 */ ··· 75 74 * Therefore we can call the generic variant by simply passing the 76 75 * third parameter also as fifth parameter. 77 76 */ 78 - return sys_ipc(call, first, second, third, ptr, third); 77 + return ksys_ipc(call, first, second, third, ptr, third); 79 78 } 79 + #endif /* CONFIG_SYSVIPC */ 80 80 81 81 SYSCALL_DEFINE1(s390_personality, unsigned int, personality) 82 82 { 83 - unsigned int ret; 83 + unsigned int ret = current->personality; 84 84 85 85 if (personality(current->personality) == PER_LINUX32 && 86 86 personality(personality) == PER_LINUX) 87 87 personality |= PER_LINUX32; 88 - ret = sys_personality(personality); 88 + 89 + if (personality != 0xffffffff) 90 + set_personality(personality); 91 + 89 92 if (personality(ret) == PER_LINUX32) 90 93 ret &= ~PER_LINUX32; 91 94 92 95 return ret; 96 + } 97 + 98 + SYSCALL_DEFINE0(ni_syscall) 99 + { 100 + return -ENOSYS; 93 101 }
+158 -143
arch/s390/kernel/syscalls/syscall.tbl
··· 15 15 5 common open sys_open compat_sys_open 16 16 6 common close sys_close sys_close 17 17 7 common restart_syscall sys_restart_syscall sys_restart_syscall 18 - 8 common creat sys_creat compat_sys_creat 19 - 9 common link sys_link compat_sys_link 20 - 10 common unlink sys_unlink compat_sys_unlink 18 + 8 common creat sys_creat sys_creat 19 + 9 common link sys_link sys_link 20 + 10 common unlink sys_unlink sys_unlink 21 21 11 common execve sys_execve compat_sys_execve 22 - 12 common chdir sys_chdir compat_sys_chdir 22 + 12 common chdir sys_chdir sys_chdir 23 23 13 32 time - compat_sys_time 24 - 14 common mknod sys_mknod compat_sys_mknod 25 - 15 common chmod sys_chmod compat_sys_chmod 26 - 16 32 lchown - compat_sys_s390_lchown16 24 + 14 common mknod sys_mknod sys_mknod 25 + 15 common chmod sys_chmod sys_chmod 26 + 16 32 lchown - sys_lchown16 27 27 19 common lseek sys_lseek compat_sys_lseek 28 28 20 common getpid sys_getpid sys_getpid 29 29 21 common mount sys_mount compat_sys_mount 30 - 22 common umount sys_oldumount compat_sys_oldumount 31 - 23 32 setuid - compat_sys_s390_setuid16 32 - 24 32 getuid - compat_sys_s390_getuid16 30 + 22 common umount sys_oldumount sys_oldumount 31 + 23 32 setuid - sys_setuid16 32 + 24 32 getuid - sys_getuid16 33 33 25 32 stime - compat_sys_stime 34 34 26 common ptrace sys_ptrace compat_sys_ptrace 35 35 27 common alarm sys_alarm sys_alarm 36 36 29 common pause sys_pause sys_pause 37 37 30 common utime sys_utime compat_sys_utime 38 - 33 common access sys_access compat_sys_access 38 + 33 common access sys_access sys_access 39 39 34 common nice sys_nice sys_nice 40 40 36 common sync sys_sync sys_sync 41 41 37 common kill sys_kill sys_kill 42 - 38 common rename sys_rename compat_sys_rename 43 - 39 common mkdir sys_mkdir compat_sys_mkdir 44 - 40 common rmdir sys_rmdir compat_sys_rmdir 42 + 38 common rename sys_rename sys_rename 43 + 39 common mkdir sys_mkdir sys_mkdir 44 + 40 common rmdir sys_rmdir sys_rmdir 45 45 41 common dup sys_dup sys_dup 46 - 42 common pipe sys_pipe compat_sys_pipe 46 + 42 common pipe sys_pipe sys_pipe 47 47 43 common times sys_times compat_sys_times 48 - 45 common brk sys_brk compat_sys_brk 49 - 46 32 setgid - compat_sys_s390_setgid16 50 - 47 32 getgid - compat_sys_s390_getgid16 51 - 48 common signal sys_signal compat_sys_signal 52 - 49 32 geteuid - compat_sys_s390_geteuid16 53 - 50 32 getegid - compat_sys_s390_getegid16 54 - 51 common acct sys_acct compat_sys_acct 55 - 52 common umount2 sys_umount compat_sys_umount 48 + 45 common brk sys_brk sys_brk 49 + 46 32 setgid - sys_setgid16 50 + 47 32 getgid - sys_getgid16 51 + 48 common signal sys_signal sys_signal 52 + 49 32 geteuid - sys_geteuid16 53 + 50 32 getegid - sys_getegid16 54 + 51 common acct sys_acct sys_acct 55 + 52 common umount2 sys_umount sys_umount 56 56 54 common ioctl sys_ioctl compat_sys_ioctl 57 57 55 common fcntl sys_fcntl compat_sys_fcntl 58 58 57 common setpgid sys_setpgid sys_setpgid 59 59 60 common umask sys_umask sys_umask 60 - 61 common chroot sys_chroot compat_sys_chroot 60 + 61 common chroot sys_chroot sys_chroot 61 61 62 common ustat sys_ustat compat_sys_ustat 62 62 63 common dup2 sys_dup2 sys_dup2 63 63 64 common getppid sys_getppid sys_getppid 64 64 65 common getpgrp sys_getpgrp sys_getpgrp 65 65 66 common setsid sys_setsid sys_setsid 66 66 67 common sigaction sys_sigaction compat_sys_sigaction 67 - 70 32 setreuid - compat_sys_s390_setreuid16 68 - 71 32 setregid - compat_sys_s390_setregid16 69 - 72 common sigsuspend sys_sigsuspend compat_sys_sigsuspend 67 + 70 32 setreuid - sys_setreuid16 68 + 71 32 setregid - sys_setregid16 69 + 72 common sigsuspend sys_sigsuspend sys_sigsuspend 70 70 73 common sigpending sys_sigpending compat_sys_sigpending 71 - 74 common sethostname sys_sethostname compat_sys_sethostname 71 + 74 common sethostname sys_sethostname sys_sethostname 72 72 75 common setrlimit sys_setrlimit compat_sys_setrlimit 73 73 76 32 getrlimit - compat_sys_old_getrlimit 74 74 77 common getrusage sys_getrusage compat_sys_getrusage 75 75 78 common gettimeofday sys_gettimeofday compat_sys_gettimeofday 76 76 79 common settimeofday sys_settimeofday compat_sys_settimeofday 77 - 80 32 getgroups - compat_sys_s390_getgroups16 78 - 81 32 setgroups - compat_sys_s390_setgroups16 79 - 83 common symlink sys_symlink compat_sys_symlink 80 - 85 common readlink sys_readlink compat_sys_readlink 81 - 86 common uselib sys_uselib compat_sys_uselib 82 - 87 common swapon sys_swapon compat_sys_swapon 83 - 88 common reboot sys_reboot compat_sys_reboot 77 + 80 32 getgroups - sys_getgroups16 78 + 81 32 setgroups - sys_setgroups16 79 + 83 common symlink sys_symlink sys_symlink 80 + 85 common readlink sys_readlink sys_readlink 81 + 86 common uselib sys_uselib sys_uselib 82 + 87 common swapon sys_swapon sys_swapon 83 + 88 common reboot sys_reboot sys_reboot 84 84 89 common readdir - compat_sys_old_readdir 85 85 90 common mmap sys_old_mmap compat_sys_s390_old_mmap 86 - 91 common munmap sys_munmap compat_sys_munmap 86 + 91 common munmap sys_munmap sys_munmap 87 87 92 common truncate sys_truncate compat_sys_truncate 88 88 93 common ftruncate sys_ftruncate compat_sys_ftruncate 89 89 94 common fchmod sys_fchmod sys_fchmod 90 - 95 32 fchown - compat_sys_s390_fchown16 90 + 95 32 fchown - sys_fchown16 91 91 96 common getpriority sys_getpriority sys_getpriority 92 92 97 common setpriority sys_setpriority sys_setpriority 93 93 99 common statfs sys_statfs compat_sys_statfs 94 94 100 common fstatfs sys_fstatfs compat_sys_fstatfs 95 95 101 32 ioperm - - 96 96 102 common socketcall sys_socketcall compat_sys_socketcall 97 - 103 common syslog sys_syslog compat_sys_syslog 97 + 103 common syslog sys_syslog sys_syslog 98 98 104 common setitimer sys_setitimer compat_sys_setitimer 99 99 105 common getitimer sys_getitimer compat_sys_getitimer 100 100 106 common stat sys_newstat compat_sys_newstat ··· 104 104 111 common vhangup sys_vhangup sys_vhangup 105 105 112 common idle - - 106 106 114 common wait4 sys_wait4 compat_sys_wait4 107 - 115 common swapoff sys_swapoff compat_sys_swapoff 107 + 115 common swapoff sys_swapoff sys_swapoff 108 108 116 common sysinfo sys_sysinfo compat_sys_sysinfo 109 109 117 common ipc sys_s390_ipc compat_sys_s390_ipc 110 110 118 common fsync sys_fsync sys_fsync 111 111 119 common sigreturn sys_sigreturn compat_sys_sigreturn 112 - 120 common clone sys_clone compat_sys_clone 113 - 121 common setdomainname sys_setdomainname compat_sys_setdomainname 114 - 122 common uname sys_newuname compat_sys_newuname 112 + 120 common clone sys_clone sys_clone 113 + 121 common setdomainname sys_setdomainname sys_setdomainname 114 + 122 common uname sys_newuname sys_newuname 115 115 124 common adjtimex sys_adjtimex compat_sys_adjtimex 116 - 125 common mprotect sys_mprotect compat_sys_mprotect 116 + 125 common mprotect sys_mprotect sys_mprotect 117 117 126 common sigprocmask sys_sigprocmask compat_sys_sigprocmask 118 118 127 common create_module - - 119 - 128 common init_module sys_init_module compat_sys_init_module 120 - 129 common delete_module sys_delete_module compat_sys_delete_module 119 + 128 common init_module sys_init_module sys_init_module 120 + 129 common delete_module sys_delete_module sys_delete_module 121 121 130 common get_kernel_syms - - 122 - 131 common quotactl sys_quotactl compat_sys_quotactl 122 + 131 common quotactl sys_quotactl sys_quotactl 123 123 132 common getpgid sys_getpgid sys_getpgid 124 124 133 common fchdir sys_fchdir sys_fchdir 125 - 134 common bdflush sys_bdflush compat_sys_bdflush 126 - 135 common sysfs sys_sysfs compat_sys_sysfs 125 + 134 common bdflush sys_bdflush sys_bdflush 126 + 135 common sysfs sys_sysfs sys_sysfs 127 127 136 common personality sys_s390_personality sys_s390_personality 128 128 137 common afs_syscall - - 129 - 138 32 setfsuid - compat_sys_s390_setfsuid16 130 - 139 32 setfsgid - compat_sys_s390_setfsgid16 131 - 140 32 _llseek - compat_sys_llseek 129 + 138 32 setfsuid - sys_setfsuid16 130 + 139 32 setfsgid - sys_setfsgid16 131 + 140 32 _llseek - sys_llseek 132 132 141 common getdents sys_getdents compat_sys_getdents 133 133 142 32 _newselect - compat_sys_select 134 134 142 64 select sys_select - 135 135 143 common flock sys_flock sys_flock 136 - 144 common msync sys_msync compat_sys_msync 136 + 144 common msync sys_msync sys_msync 137 137 145 common readv sys_readv compat_sys_readv 138 138 146 common writev sys_writev compat_sys_writev 139 139 147 common getsid sys_getsid sys_getsid 140 140 148 common fdatasync sys_fdatasync sys_fdatasync 141 141 149 common _sysctl sys_sysctl compat_sys_sysctl 142 - 150 common mlock sys_mlock compat_sys_mlock 143 - 151 common munlock sys_munlock compat_sys_munlock 142 + 150 common mlock sys_mlock sys_mlock 143 + 151 common munlock sys_munlock sys_munlock 144 144 152 common mlockall sys_mlockall sys_mlockall 145 145 153 common munlockall sys_munlockall sys_munlockall 146 - 154 common sched_setparam sys_sched_setparam compat_sys_sched_setparam 147 - 155 common sched_getparam sys_sched_getparam compat_sys_sched_getparam 148 - 156 common sched_setscheduler sys_sched_setscheduler compat_sys_sched_setscheduler 146 + 154 common sched_setparam sys_sched_setparam sys_sched_setparam 147 + 155 common sched_getparam sys_sched_getparam sys_sched_getparam 148 + 156 common sched_setscheduler sys_sched_setscheduler sys_sched_setscheduler 149 149 157 common sched_getscheduler sys_sched_getscheduler sys_sched_getscheduler 150 150 158 common sched_yield sys_sched_yield sys_sched_yield 151 151 159 common sched_get_priority_max sys_sched_get_priority_max sys_sched_get_priority_max 152 152 160 common sched_get_priority_min sys_sched_get_priority_min sys_sched_get_priority_min 153 153 161 common sched_rr_get_interval sys_sched_rr_get_interval compat_sys_sched_rr_get_interval 154 154 162 common nanosleep sys_nanosleep compat_sys_nanosleep 155 - 163 common mremap sys_mremap compat_sys_mremap 156 - 164 32 setresuid - compat_sys_s390_setresuid16 157 - 165 32 getresuid - compat_sys_s390_getresuid16 155 + 163 common mremap sys_mremap sys_mremap 156 + 164 32 setresuid - sys_setresuid16 157 + 165 32 getresuid - sys_getresuid16 158 158 167 common query_module - - 159 - 168 common poll sys_poll compat_sys_poll 159 + 168 common poll sys_poll sys_poll 160 160 169 common nfsservctl - - 161 - 170 32 setresgid - compat_sys_s390_setresgid16 162 - 171 32 getresgid - compat_sys_s390_getresgid16 163 - 172 common prctl sys_prctl compat_sys_prctl 161 + 170 32 setresgid - sys_setresgid16 162 + 171 32 getresgid - sys_getresgid16 163 + 172 common prctl sys_prctl sys_prctl 164 164 173 common rt_sigreturn sys_rt_sigreturn compat_sys_rt_sigreturn 165 165 174 common rt_sigaction sys_rt_sigaction compat_sys_rt_sigaction 166 166 175 common rt_sigprocmask sys_rt_sigprocmask compat_sys_rt_sigprocmask ··· 170 170 179 common rt_sigsuspend sys_rt_sigsuspend compat_sys_rt_sigsuspend 171 171 180 common pread64 sys_pread64 compat_sys_s390_pread64 172 172 181 common pwrite64 sys_pwrite64 compat_sys_s390_pwrite64 173 - 182 32 chown - compat_sys_s390_chown16 174 - 183 common getcwd sys_getcwd compat_sys_getcwd 175 - 184 common capget sys_capget compat_sys_capget 176 - 185 common capset sys_capset compat_sys_capset 173 + 182 32 chown - sys_chown16 174 + 183 common getcwd sys_getcwd sys_getcwd 175 + 184 common capget sys_capget sys_capget 176 + 185 common capset sys_capset sys_capset 177 177 186 common sigaltstack sys_sigaltstack compat_sys_sigaltstack 178 178 187 common sendfile sys_sendfile64 compat_sys_sendfile 179 179 188 common getpmsg - - ··· 187 187 195 32 stat64 - compat_sys_s390_stat64 188 188 196 32 lstat64 - compat_sys_s390_lstat64 189 189 197 32 fstat64 - compat_sys_s390_fstat64 190 - 198 32 lchown32 - compat_sys_lchown 190 + 198 32 lchown32 - sys_lchown 191 191 198 64 lchown sys_lchown - 192 192 199 32 getuid32 - sys_getuid 193 193 199 64 getuid sys_getuid - ··· 201 201 203 64 setreuid sys_setreuid - 202 202 204 32 setregid32 - sys_setregid 203 203 204 64 setregid sys_setregid - 204 - 205 32 getgroups32 - compat_sys_getgroups 204 + 205 32 getgroups32 - sys_getgroups 205 205 205 64 getgroups sys_getgroups - 206 - 206 32 setgroups32 - compat_sys_setgroups 206 + 206 32 setgroups32 - sys_setgroups 207 207 206 64 setgroups sys_setgroups - 208 208 207 32 fchown32 - sys_fchown 209 209 207 64 fchown sys_fchown - 210 210 208 32 setresuid32 - sys_setresuid 211 211 208 64 setresuid sys_setresuid - 212 - 209 32 getresuid32 - compat_sys_getresuid 212 + 209 32 getresuid32 - sys_getresuid 213 213 209 64 getresuid sys_getresuid - 214 214 210 32 setresgid32 - sys_setresgid 215 215 210 64 setresgid sys_setresgid - 216 - 211 32 getresgid32 - compat_sys_getresgid 216 + 211 32 getresgid32 - sys_getresgid 217 217 211 64 getresgid sys_getresgid - 218 - 212 32 chown32 - compat_sys_chown 218 + 212 32 chown32 - sys_chown 219 219 212 64 chown sys_chown - 220 220 213 32 setuid32 - sys_setuid 221 221 213 64 setuid sys_setuid - ··· 225 225 215 64 setfsuid sys_setfsuid - 226 226 216 32 setfsgid32 - sys_setfsgid 227 227 216 64 setfsgid sys_setfsgid - 228 - 217 common pivot_root sys_pivot_root compat_sys_pivot_root 229 - 218 common mincore sys_mincore compat_sys_mincore 230 - 219 common madvise sys_madvise compat_sys_madvise 231 - 220 common getdents64 sys_getdents64 compat_sys_getdents64 228 + 217 common pivot_root sys_pivot_root sys_pivot_root 229 + 218 common mincore sys_mincore sys_mincore 230 + 219 common madvise sys_madvise sys_madvise 231 + 220 common getdents64 sys_getdents64 sys_getdents64 232 232 221 32 fcntl64 - compat_sys_fcntl64 233 233 222 common readahead sys_readahead compat_sys_s390_readahead 234 234 223 32 sendfile64 - compat_sys_sendfile64 235 - 224 common setxattr sys_setxattr compat_sys_setxattr 236 - 225 common lsetxattr sys_lsetxattr compat_sys_lsetxattr 237 - 226 common fsetxattr sys_fsetxattr compat_sys_fsetxattr 238 - 227 common getxattr sys_getxattr compat_sys_getxattr 239 - 228 common lgetxattr sys_lgetxattr compat_sys_lgetxattr 240 - 229 common fgetxattr sys_fgetxattr compat_sys_fgetxattr 241 - 230 common listxattr sys_listxattr compat_sys_listxattr 242 - 231 common llistxattr sys_llistxattr compat_sys_llistxattr 243 - 232 common flistxattr sys_flistxattr compat_sys_flistxattr 244 - 233 common removexattr sys_removexattr compat_sys_removexattr 245 - 234 common lremovexattr sys_lremovexattr compat_sys_lremovexattr 246 - 235 common fremovexattr sys_fremovexattr compat_sys_fremovexattr 235 + 224 common setxattr sys_setxattr sys_setxattr 236 + 225 common lsetxattr sys_lsetxattr sys_lsetxattr 237 + 226 common fsetxattr sys_fsetxattr sys_fsetxattr 238 + 227 common getxattr sys_getxattr sys_getxattr 239 + 228 common lgetxattr sys_lgetxattr sys_lgetxattr 240 + 229 common fgetxattr sys_fgetxattr sys_fgetxattr 241 + 230 common listxattr sys_listxattr sys_listxattr 242 + 231 common llistxattr sys_llistxattr sys_llistxattr 243 + 232 common flistxattr sys_flistxattr sys_flistxattr 244 + 233 common removexattr sys_removexattr sys_removexattr 245 + 234 common lremovexattr sys_lremovexattr sys_lremovexattr 246 + 235 common fremovexattr sys_fremovexattr sys_fremovexattr 247 247 236 common gettid sys_gettid sys_gettid 248 248 237 common tkill sys_tkill sys_tkill 249 249 238 common futex sys_futex compat_sys_futex ··· 251 251 240 common sched_getaffinity sys_sched_getaffinity compat_sys_sched_getaffinity 252 252 241 common tgkill sys_tgkill sys_tgkill 253 253 243 common io_setup sys_io_setup compat_sys_io_setup 254 - 244 common io_destroy sys_io_destroy compat_sys_io_destroy 254 + 244 common io_destroy sys_io_destroy sys_io_destroy 255 255 245 common io_getevents sys_io_getevents compat_sys_io_getevents 256 256 246 common io_submit sys_io_submit compat_sys_io_submit 257 - 247 common io_cancel sys_io_cancel compat_sys_io_cancel 257 + 247 common io_cancel sys_io_cancel sys_io_cancel 258 258 248 common exit_group sys_exit_group sys_exit_group 259 259 249 common epoll_create sys_epoll_create sys_epoll_create 260 - 250 common epoll_ctl sys_epoll_ctl compat_sys_epoll_ctl 261 - 251 common epoll_wait sys_epoll_wait compat_sys_epoll_wait 262 - 252 common set_tid_address sys_set_tid_address compat_sys_set_tid_address 260 + 250 common epoll_ctl sys_epoll_ctl sys_epoll_ctl 261 + 251 common epoll_wait sys_epoll_wait sys_epoll_wait 262 + 252 common set_tid_address sys_set_tid_address sys_set_tid_address 263 263 253 common fadvise64 sys_fadvise64_64 compat_sys_s390_fadvise64 264 264 254 common timer_create sys_timer_create compat_sys_timer_create 265 265 255 common timer_settime sys_timer_settime compat_sys_timer_settime ··· 273 273 264 32 fadvise64_64 - compat_sys_s390_fadvise64_64 274 274 265 common statfs64 sys_statfs64 compat_sys_statfs64 275 275 266 common fstatfs64 sys_fstatfs64 compat_sys_fstatfs64 276 - 267 common remap_file_pages sys_remap_file_pages compat_sys_remap_file_pages 276 + 267 common remap_file_pages sys_remap_file_pages sys_remap_file_pages 277 277 268 common mbind sys_mbind compat_sys_mbind 278 278 269 common get_mempolicy sys_get_mempolicy compat_sys_get_mempolicy 279 279 270 common set_mempolicy sys_set_mempolicy compat_sys_set_mempolicy 280 280 271 common mq_open sys_mq_open compat_sys_mq_open 281 - 272 common mq_unlink sys_mq_unlink compat_sys_mq_unlink 281 + 272 common mq_unlink sys_mq_unlink sys_mq_unlink 282 282 273 common mq_timedsend sys_mq_timedsend compat_sys_mq_timedsend 283 283 274 common mq_timedreceive sys_mq_timedreceive compat_sys_mq_timedreceive 284 284 275 common mq_notify sys_mq_notify compat_sys_mq_notify 285 285 276 common mq_getsetattr sys_mq_getsetattr compat_sys_mq_getsetattr 286 286 277 common kexec_load sys_kexec_load compat_sys_kexec_load 287 - 278 common add_key sys_add_key compat_sys_add_key 288 - 279 common request_key sys_request_key compat_sys_request_key 287 + 278 common add_key sys_add_key sys_add_key 288 + 279 common request_key sys_request_key sys_request_key 289 289 280 common keyctl sys_keyctl compat_sys_keyctl 290 290 281 common waitid sys_waitid compat_sys_waitid 291 291 282 common ioprio_set sys_ioprio_set sys_ioprio_set 292 292 283 common ioprio_get sys_ioprio_get sys_ioprio_get 293 293 284 common inotify_init sys_inotify_init sys_inotify_init 294 - 285 common inotify_add_watch sys_inotify_add_watch compat_sys_inotify_add_watch 294 + 285 common inotify_add_watch sys_inotify_add_watch sys_inotify_add_watch 295 295 286 common inotify_rm_watch sys_inotify_rm_watch sys_inotify_rm_watch 296 296 287 common migrate_pages sys_migrate_pages compat_sys_migrate_pages 297 297 288 common openat sys_openat compat_sys_openat 298 - 289 common mkdirat sys_mkdirat compat_sys_mkdirat 299 - 290 common mknodat sys_mknodat compat_sys_mknodat 300 - 291 common fchownat sys_fchownat compat_sys_fchownat 298 + 289 common mkdirat sys_mkdirat sys_mkdirat 299 + 290 common mknodat sys_mknodat sys_mknodat 300 + 291 common fchownat sys_fchownat sys_fchownat 301 301 292 common futimesat sys_futimesat compat_sys_futimesat 302 302 293 32 fstatat64 - compat_sys_s390_fstatat64 303 303 293 64 newfstatat sys_newfstatat - 304 - 294 common unlinkat sys_unlinkat compat_sys_unlinkat 305 - 295 common renameat sys_renameat compat_sys_renameat 306 - 296 common linkat sys_linkat compat_sys_linkat 307 - 297 common symlinkat sys_symlinkat compat_sys_symlinkat 308 - 298 common readlinkat sys_readlinkat compat_sys_readlinkat 309 - 299 common fchmodat sys_fchmodat compat_sys_fchmodat 310 - 300 common faccessat sys_faccessat compat_sys_faccessat 304 + 294 common unlinkat sys_unlinkat sys_unlinkat 305 + 295 common renameat sys_renameat sys_renameat 306 + 296 common linkat sys_linkat sys_linkat 307 + 297 common symlinkat sys_symlinkat sys_symlinkat 308 + 298 common readlinkat sys_readlinkat sys_readlinkat 309 + 299 common fchmodat sys_fchmodat sys_fchmodat 310 + 300 common faccessat sys_faccessat sys_faccessat 311 311 301 common pselect6 sys_pselect6 compat_sys_pselect6 312 312 302 common ppoll sys_ppoll compat_sys_ppoll 313 - 303 common unshare sys_unshare compat_sys_unshare 313 + 303 common unshare sys_unshare sys_unshare 314 314 304 common set_robust_list sys_set_robust_list compat_sys_set_robust_list 315 315 305 common get_robust_list sys_get_robust_list compat_sys_get_robust_list 316 - 306 common splice sys_splice compat_sys_splice 316 + 306 common splice sys_splice sys_splice 317 317 307 common sync_file_range sys_sync_file_range compat_sys_s390_sync_file_range 318 - 308 common tee sys_tee compat_sys_tee 318 + 308 common tee sys_tee sys_tee 319 319 309 common vmsplice sys_vmsplice compat_sys_vmsplice 320 320 310 common move_pages sys_move_pages compat_sys_move_pages 321 - 311 common getcpu sys_getcpu compat_sys_getcpu 321 + 311 common getcpu sys_getcpu sys_getcpu 322 322 312 common epoll_pwait sys_epoll_pwait compat_sys_epoll_pwait 323 323 313 common utimes sys_utimes compat_sys_utimes 324 324 314 common fallocate sys_fallocate compat_sys_s390_fallocate ··· 332 332 322 common signalfd4 sys_signalfd4 compat_sys_signalfd4 333 333 323 common eventfd2 sys_eventfd2 sys_eventfd2 334 334 324 common inotify_init1 sys_inotify_init1 sys_inotify_init1 335 - 325 common pipe2 sys_pipe2 compat_sys_pipe2 335 + 325 common pipe2 sys_pipe2 sys_pipe2 336 336 326 common dup3 sys_dup3 sys_dup3 337 337 327 common epoll_create1 sys_epoll_create1 sys_epoll_create1 338 338 328 common preadv sys_preadv compat_sys_preadv 339 339 329 common pwritev sys_pwritev compat_sys_pwritev 340 340 330 common rt_tgsigqueueinfo sys_rt_tgsigqueueinfo compat_sys_rt_tgsigqueueinfo 341 - 331 common perf_event_open sys_perf_event_open compat_sys_perf_event_open 341 + 331 common perf_event_open sys_perf_event_open sys_perf_event_open 342 342 332 common fanotify_init sys_fanotify_init sys_fanotify_init 343 343 333 common fanotify_mark sys_fanotify_mark compat_sys_fanotify_mark 344 - 334 common prlimit64 sys_prlimit64 compat_sys_prlimit64 345 - 335 common name_to_handle_at sys_name_to_handle_at compat_sys_name_to_handle_at 344 + 334 common prlimit64 sys_prlimit64 sys_prlimit64 345 + 335 common name_to_handle_at sys_name_to_handle_at sys_name_to_handle_at 346 346 336 common open_by_handle_at sys_open_by_handle_at compat_sys_open_by_handle_at 347 347 337 common clock_adjtime sys_clock_adjtime compat_sys_clock_adjtime 348 348 338 common syncfs sys_syncfs sys_syncfs ··· 350 350 340 common process_vm_readv sys_process_vm_readv compat_sys_process_vm_readv 351 351 341 common process_vm_writev sys_process_vm_writev compat_sys_process_vm_writev 352 352 342 common s390_runtime_instr sys_s390_runtime_instr sys_s390_runtime_instr 353 - 343 common kcmp sys_kcmp compat_sys_kcmp 354 - 344 common finit_module sys_finit_module compat_sys_finit_module 355 - 345 common sched_setattr sys_sched_setattr compat_sys_sched_setattr 356 - 346 common sched_getattr sys_sched_getattr compat_sys_sched_getattr 357 - 347 common renameat2 sys_renameat2 compat_sys_renameat2 358 - 348 common seccomp sys_seccomp compat_sys_seccomp 359 - 349 common getrandom sys_getrandom compat_sys_getrandom 360 - 350 common memfd_create sys_memfd_create compat_sys_memfd_create 361 - 351 common bpf sys_bpf compat_sys_bpf 362 - 352 common s390_pci_mmio_write sys_s390_pci_mmio_write compat_sys_s390_pci_mmio_write 363 - 353 common s390_pci_mmio_read sys_s390_pci_mmio_read compat_sys_s390_pci_mmio_read 353 + 343 common kcmp sys_kcmp sys_kcmp 354 + 344 common finit_module sys_finit_module sys_finit_module 355 + 345 common sched_setattr sys_sched_setattr sys_sched_setattr 356 + 346 common sched_getattr sys_sched_getattr sys_sched_getattr 357 + 347 common renameat2 sys_renameat2 sys_renameat2 358 + 348 common seccomp sys_seccomp sys_seccomp 359 + 349 common getrandom sys_getrandom sys_getrandom 360 + 350 common memfd_create sys_memfd_create sys_memfd_create 361 + 351 common bpf sys_bpf sys_bpf 362 + 352 common s390_pci_mmio_write sys_s390_pci_mmio_write sys_s390_pci_mmio_write 363 + 353 common s390_pci_mmio_read sys_s390_pci_mmio_read sys_s390_pci_mmio_read 364 364 354 common execveat sys_execveat compat_sys_execveat 365 365 355 common userfaultfd sys_userfaultfd sys_userfaultfd 366 366 356 common membarrier sys_membarrier sys_membarrier 367 367 357 common recvmmsg sys_recvmmsg compat_sys_recvmmsg 368 368 358 common sendmmsg sys_sendmmsg compat_sys_sendmmsg 369 369 359 common socket sys_socket sys_socket 370 - 360 common socketpair sys_socketpair compat_sys_socketpair 371 - 361 common bind sys_bind compat_sys_bind 372 - 362 common connect sys_connect compat_sys_connect 370 + 360 common socketpair sys_socketpair sys_socketpair 371 + 361 common bind sys_bind sys_bind 372 + 362 common connect sys_connect sys_connect 373 373 363 common listen sys_listen sys_listen 374 - 364 common accept4 sys_accept4 compat_sys_accept4 374 + 364 common accept4 sys_accept4 sys_accept4 375 375 365 common getsockopt sys_getsockopt compat_sys_getsockopt 376 376 366 common setsockopt sys_setsockopt compat_sys_setsockopt 377 - 367 common getsockname sys_getsockname compat_sys_getsockname 378 - 368 common getpeername sys_getpeername compat_sys_getpeername 379 - 369 common sendto sys_sendto compat_sys_sendto 377 + 367 common getsockname sys_getsockname sys_getsockname 378 + 368 common getpeername sys_getpeername sys_getpeername 379 + 369 common sendto sys_sendto sys_sendto 380 380 370 common sendmsg sys_sendmsg compat_sys_sendmsg 381 381 371 common recvfrom sys_recvfrom compat_sys_recvfrom 382 382 372 common recvmsg sys_recvmsg compat_sys_recvmsg 383 383 373 common shutdown sys_shutdown sys_shutdown 384 - 374 common mlock2 sys_mlock2 compat_sys_mlock2 385 - 375 common copy_file_range sys_copy_file_range compat_sys_copy_file_range 384 + 374 common mlock2 sys_mlock2 sys_mlock2 385 + 375 common copy_file_range sys_copy_file_range sys_copy_file_range 386 386 376 common preadv2 sys_preadv2 compat_sys_preadv2 387 387 377 common pwritev2 sys_pwritev2 compat_sys_pwritev2 388 - 378 common s390_guarded_storage sys_s390_guarded_storage compat_sys_s390_guarded_storage 389 - 379 common statx sys_statx compat_sys_statx 390 - 380 common s390_sthyi sys_s390_sthyi compat_sys_s390_sthyi 391 - 381 common kexec_file_load sys_kexec_file_load compat_sys_kexec_file_load 388 + 378 common s390_guarded_storage sys_s390_guarded_storage sys_s390_guarded_storage 389 + 379 common statx sys_statx sys_statx 390 + 380 common s390_sthyi sys_s390_sthyi sys_s390_sthyi 391 + 381 common kexec_file_load sys_kexec_file_load sys_kexec_file_load 392 392 382 common io_pgetevents sys_io_pgetevents compat_sys_io_pgetevents 393 - 383 common rseq sys_rseq compat_sys_rseq 393 + 383 common rseq sys_rseq sys_rseq 394 + 384 common pkey_mprotect sys_pkey_mprotect sys_pkey_mprotect 395 + 385 common pkey_alloc sys_pkey_alloc sys_pkey_alloc 396 + 386 common pkey_free sys_pkey_free sys_pkey_free 397 + # room for arch specific syscalls 398 + 392 64 semtimedop sys_semtimedop - 399 + 393 common semget sys_semget sys_semget 400 + 394 common semctl sys_semctl compat_sys_semctl 401 + 395 common shmget sys_shmget sys_shmget 402 + 396 common shmctl sys_shmctl compat_sys_shmctl 403 + 397 common shmat sys_shmat compat_sys_shmat 404 + 398 common shmdt sys_shmdt sys_shmdt 405 + 399 common msgget sys_msgget sys_msgget 406 + 400 common msgsnd sys_msgsnd compat_sys_msgsnd 407 + 401 common msgrcv sys_msgrcv compat_sys_msgrcv 408 + 402 common msgctl sys_msgctl compat_sys_msgctl
-403
arch/sh/include/uapi/asm/unistd_32.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 - #ifndef __ASM_SH_UNISTD_32_H 3 - #define __ASM_SH_UNISTD_32_H 4 - 5 - /* 6 - * Copyright (C) 1999 Niibe Yutaka 7 - */ 8 - 9 - /* 10 - * This file contains the system call numbers. 11 - */ 12 - 13 - #define __NR_restart_syscall 0 14 - #define __NR_exit 1 15 - #define __NR_fork 2 16 - #define __NR_read 3 17 - #define __NR_write 4 18 - #define __NR_open 5 19 - #define __NR_close 6 20 - #define __NR_waitpid 7 21 - #define __NR_creat 8 22 - #define __NR_link 9 23 - #define __NR_unlink 10 24 - #define __NR_execve 11 25 - #define __NR_chdir 12 26 - #define __NR_time 13 27 - #define __NR_mknod 14 28 - #define __NR_chmod 15 29 - #define __NR_lchown 16 30 - /* 17 was sys_break */ 31 - #define __NR_oldstat 18 32 - #define __NR_lseek 19 33 - #define __NR_getpid 20 34 - #define __NR_mount 21 35 - #define __NR_umount 22 36 - #define __NR_setuid 23 37 - #define __NR_getuid 24 38 - #define __NR_stime 25 39 - #define __NR_ptrace 26 40 - #define __NR_alarm 27 41 - #define __NR_oldfstat 28 42 - #define __NR_pause 29 43 - #define __NR_utime 30 44 - /* 31 was sys_stty */ 45 - /* 32 was sys_gtty */ 46 - #define __NR_access 33 47 - #define __NR_nice 34 48 - /* 35 was sys_ftime */ 49 - #define __NR_sync 36 50 - #define __NR_kill 37 51 - #define __NR_rename 38 52 - #define __NR_mkdir 39 53 - #define __NR_rmdir 40 54 - #define __NR_dup 41 55 - #define __NR_pipe 42 56 - #define __NR_times 43 57 - /* 44 was sys_prof */ 58 - #define __NR_brk 45 59 - #define __NR_setgid 46 60 - #define __NR_getgid 47 61 - #define __NR_signal 48 62 - #define __NR_geteuid 49 63 - #define __NR_getegid 50 64 - #define __NR_acct 51 65 - #define __NR_umount2 52 66 - /* 53 was sys_lock */ 67 - #define __NR_ioctl 54 68 - #define __NR_fcntl 55 69 - /* 56 was sys_mpx */ 70 - #define __NR_setpgid 57 71 - /* 58 was sys_ulimit */ 72 - /* 59 was sys_olduname */ 73 - #define __NR_umask 60 74 - #define __NR_chroot 61 75 - #define __NR_ustat 62 76 - #define __NR_dup2 63 77 - #define __NR_getppid 64 78 - #define __NR_getpgrp 65 79 - #define __NR_setsid 66 80 - #define __NR_sigaction 67 81 - #define __NR_sgetmask 68 82 - #define __NR_ssetmask 69 83 - #define __NR_setreuid 70 84 - #define __NR_setregid 71 85 - #define __NR_sigsuspend 72 86 - #define __NR_sigpending 73 87 - #define __NR_sethostname 74 88 - #define __NR_setrlimit 75 89 - #define __NR_getrlimit 76 /* Back compatible 2Gig limited rlimit */ 90 - #define __NR_getrusage 77 91 - #define __NR_gettimeofday 78 92 - #define __NR_settimeofday 79 93 - #define __NR_getgroups 80 94 - #define __NR_setgroups 81 95 - /* 82 was sys_oldselect */ 96 - #define __NR_symlink 83 97 - #define __NR_oldlstat 84 98 - #define __NR_readlink 85 99 - #define __NR_uselib 86 100 - #define __NR_swapon 87 101 - #define __NR_reboot 88 102 - #define __NR_readdir 89 103 - #define __NR_mmap 90 104 - #define __NR_munmap 91 105 - #define __NR_truncate 92 106 - #define __NR_ftruncate 93 107 - #define __NR_fchmod 94 108 - #define __NR_fchown 95 109 - #define __NR_getpriority 96 110 - #define __NR_setpriority 97 111 - /* 98 was sys_profil */ 112 - #define __NR_statfs 99 113 - #define __NR_fstatfs 100 114 - /* 101 was sys_ioperm */ 115 - #define __NR_socketcall 102 116 - #define __NR_syslog 103 117 - #define __NR_setitimer 104 118 - #define __NR_getitimer 105 119 - #define __NR_stat 106 120 - #define __NR_lstat 107 121 - #define __NR_fstat 108 122 - #define __NR_olduname 109 123 - /* 110 was sys_iopl */ 124 - #define __NR_vhangup 111 125 - /* 112 was sys_idle */ 126 - /* 113 was sys_vm86old */ 127 - #define __NR_wait4 114 128 - #define __NR_swapoff 115 129 - #define __NR_sysinfo 116 130 - #define __NR_ipc 117 131 - #define __NR_fsync 118 132 - #define __NR_sigreturn 119 133 - #define __NR_clone 120 134 - #define __NR_setdomainname 121 135 - #define __NR_uname 122 136 - #define __NR_cacheflush 123 137 - #define __NR_adjtimex 124 138 - #define __NR_mprotect 125 139 - #define __NR_sigprocmask 126 140 - /* 127 was sys_create_module */ 141 - #define __NR_init_module 128 142 - #define __NR_delete_module 129 143 - /* 130 was sys_get_kernel_syms */ 144 - #define __NR_quotactl 131 145 - #define __NR_getpgid 132 146 - #define __NR_fchdir 133 147 - #define __NR_bdflush 134 148 - #define __NR_sysfs 135 149 - #define __NR_personality 136 150 - /* 137 was sys_afs_syscall */ 151 - #define __NR_setfsuid 138 152 - #define __NR_setfsgid 139 153 - #define __NR__llseek 140 154 - #define __NR_getdents 141 155 - #define __NR__newselect 142 156 - #define __NR_flock 143 157 - #define __NR_msync 144 158 - #define __NR_readv 145 159 - #define __NR_writev 146 160 - #define __NR_getsid 147 161 - #define __NR_fdatasync 148 162 - #define __NR__sysctl 149 163 - #define __NR_mlock 150 164 - #define __NR_munlock 151 165 - #define __NR_mlockall 152 166 - #define __NR_munlockall 153 167 - #define __NR_sched_setparam 154 168 - #define __NR_sched_getparam 155 169 - #define __NR_sched_setscheduler 156 170 - #define __NR_sched_getscheduler 157 171 - #define __NR_sched_yield 158 172 - #define __NR_sched_get_priority_max 159 173 - #define __NR_sched_get_priority_min 160 174 - #define __NR_sched_rr_get_interval 161 175 - #define __NR_nanosleep 162 176 - #define __NR_mremap 163 177 - #define __NR_setresuid 164 178 - #define __NR_getresuid 165 179 - /* 166 was sys_vm86 */ 180 - /* 167 was sys_query_module */ 181 - #define __NR_poll 168 182 - #define __NR_nfsservctl 169 183 - #define __NR_setresgid 170 184 - #define __NR_getresgid 171 185 - #define __NR_prctl 172 186 - #define __NR_rt_sigreturn 173 187 - #define __NR_rt_sigaction 174 188 - #define __NR_rt_sigprocmask 175 189 - #define __NR_rt_sigpending 176 190 - #define __NR_rt_sigtimedwait 177 191 - #define __NR_rt_sigqueueinfo 178 192 - #define __NR_rt_sigsuspend 179 193 - #define __NR_pread64 180 194 - #define __NR_pwrite64 181 195 - #define __NR_chown 182 196 - #define __NR_getcwd 183 197 - #define __NR_capget 184 198 - #define __NR_capset 185 199 - #define __NR_sigaltstack 186 200 - #define __NR_sendfile 187 201 - /* 188 reserved for sys_getpmsg */ 202 - /* 189 reserved for sys_putpmsg */ 203 - #define __NR_vfork 190 204 - #define __NR_ugetrlimit 191 /* SuS compliant getrlimit */ 205 - #define __NR_mmap2 192 206 - #define __NR_truncate64 193 207 - #define __NR_ftruncate64 194 208 - #define __NR_stat64 195 209 - #define __NR_lstat64 196 210 - #define __NR_fstat64 197 211 - #define __NR_lchown32 198 212 - #define __NR_getuid32 199 213 - #define __NR_getgid32 200 214 - #define __NR_geteuid32 201 215 - #define __NR_getegid32 202 216 - #define __NR_setreuid32 203 217 - #define __NR_setregid32 204 218 - #define __NR_getgroups32 205 219 - #define __NR_setgroups32 206 220 - #define __NR_fchown32 207 221 - #define __NR_setresuid32 208 222 - #define __NR_getresuid32 209 223 - #define __NR_setresgid32 210 224 - #define __NR_getresgid32 211 225 - #define __NR_chown32 212 226 - #define __NR_setuid32 213 227 - #define __NR_setgid32 214 228 - #define __NR_setfsuid32 215 229 - #define __NR_setfsgid32 216 230 - #define __NR_pivot_root 217 231 - #define __NR_mincore 218 232 - #define __NR_madvise 219 233 - #define __NR_getdents64 220 234 - #define __NR_fcntl64 221 235 - /* 222 is reserved for tux */ 236 - /* 223 is unused */ 237 - #define __NR_gettid 224 238 - #define __NR_readahead 225 239 - #define __NR_setxattr 226 240 - #define __NR_lsetxattr 227 241 - #define __NR_fsetxattr 228 242 - #define __NR_getxattr 229 243 - #define __NR_lgetxattr 230 244 - #define __NR_fgetxattr 231 245 - #define __NR_listxattr 232 246 - #define __NR_llistxattr 233 247 - #define __NR_flistxattr 234 248 - #define __NR_removexattr 235 249 - #define __NR_lremovexattr 236 250 - #define __NR_fremovexattr 237 251 - #define __NR_tkill 238 252 - #define __NR_sendfile64 239 253 - #define __NR_futex 240 254 - #define __NR_sched_setaffinity 241 255 - #define __NR_sched_getaffinity 242 256 - /* 243 is reserved for set_thread_area */ 257 - /* 244 is reserved for get_thread_area */ 258 - #define __NR_io_setup 245 259 - #define __NR_io_destroy 246 260 - #define __NR_io_getevents 247 261 - #define __NR_io_submit 248 262 - #define __NR_io_cancel 249 263 - #define __NR_fadvise64 250 264 - /* 251 is unused */ 265 - #define __NR_exit_group 252 266 - #define __NR_lookup_dcookie 253 267 - #define __NR_epoll_create 254 268 - #define __NR_epoll_ctl 255 269 - #define __NR_epoll_wait 256 270 - #define __NR_remap_file_pages 257 271 - #define __NR_set_tid_address 258 272 - #define __NR_timer_create 259 273 - #define __NR_timer_settime (__NR_timer_create+1) 274 - #define __NR_timer_gettime (__NR_timer_create+2) 275 - #define __NR_timer_getoverrun (__NR_timer_create+3) 276 - #define __NR_timer_delete (__NR_timer_create+4) 277 - #define __NR_clock_settime (__NR_timer_create+5) 278 - #define __NR_clock_gettime (__NR_timer_create+6) 279 - #define __NR_clock_getres (__NR_timer_create+7) 280 - #define __NR_clock_nanosleep (__NR_timer_create+8) 281 - #define __NR_statfs64 268 282 - #define __NR_fstatfs64 269 283 - #define __NR_tgkill 270 284 - #define __NR_utimes 271 285 - #define __NR_fadvise64_64 272 286 - /* 273 is reserved for vserver */ 287 - #define __NR_mbind 274 288 - #define __NR_get_mempolicy 275 289 - #define __NR_set_mempolicy 276 290 - #define __NR_mq_open 277 291 - #define __NR_mq_unlink (__NR_mq_open+1) 292 - #define __NR_mq_timedsend (__NR_mq_open+2) 293 - #define __NR_mq_timedreceive (__NR_mq_open+3) 294 - #define __NR_mq_notify (__NR_mq_open+4) 295 - #define __NR_mq_getsetattr (__NR_mq_open+5) 296 - #define __NR_kexec_load 283 297 - #define __NR_waitid 284 298 - #define __NR_add_key 285 299 - #define __NR_request_key 286 300 - #define __NR_keyctl 287 301 - #define __NR_ioprio_set 288 302 - #define __NR_ioprio_get 289 303 - #define __NR_inotify_init 290 304 - #define __NR_inotify_add_watch 291 305 - #define __NR_inotify_rm_watch 292 306 - /* 293 is unused */ 307 - #define __NR_migrate_pages 294 308 - #define __NR_openat 295 309 - #define __NR_mkdirat 296 310 - #define __NR_mknodat 297 311 - #define __NR_fchownat 298 312 - #define __NR_futimesat 299 313 - #define __NR_fstatat64 300 314 - #define __NR_unlinkat 301 315 - #define __NR_renameat 302 316 - #define __NR_linkat 303 317 - #define __NR_symlinkat 304 318 - #define __NR_readlinkat 305 319 - #define __NR_fchmodat 306 320 - #define __NR_faccessat 307 321 - #define __NR_pselect6 308 322 - #define __NR_ppoll 309 323 - #define __NR_unshare 310 324 - #define __NR_set_robust_list 311 325 - #define __NR_get_robust_list 312 326 - #define __NR_splice 313 327 - #define __NR_sync_file_range 314 328 - #define __NR_tee 315 329 - #define __NR_vmsplice 316 330 - #define __NR_move_pages 317 331 - #define __NR_getcpu 318 332 - #define __NR_epoll_pwait 319 333 - #define __NR_utimensat 320 334 - #define __NR_signalfd 321 335 - #define __NR_timerfd_create 322 336 - #define __NR_eventfd 323 337 - #define __NR_fallocate 324 338 - #define __NR_timerfd_settime 325 339 - #define __NR_timerfd_gettime 326 340 - #define __NR_signalfd4 327 341 - #define __NR_eventfd2 328 342 - #define __NR_epoll_create1 329 343 - #define __NR_dup3 330 344 - #define __NR_pipe2 331 345 - #define __NR_inotify_init1 332 346 - #define __NR_preadv 333 347 - #define __NR_pwritev 334 348 - #define __NR_rt_tgsigqueueinfo 335 349 - #define __NR_perf_event_open 336 350 - #define __NR_fanotify_init 337 351 - #define __NR_fanotify_mark 338 352 - #define __NR_prlimit64 339 353 - 354 - /* Non-multiplexed socket family */ 355 - #define __NR_socket 340 356 - #define __NR_bind 341 357 - #define __NR_connect 342 358 - #define __NR_listen 343 359 - #define __NR_accept 344 360 - #define __NR_getsockname 345 361 - #define __NR_getpeername 346 362 - #define __NR_socketpair 347 363 - #define __NR_send 348 364 - #define __NR_sendto 349 365 - #define __NR_recv 350 366 - #define __NR_recvfrom 351 367 - #define __NR_shutdown 352 368 - #define __NR_setsockopt 353 369 - #define __NR_getsockopt 354 370 - #define __NR_sendmsg 355 371 - #define __NR_recvmsg 356 372 - #define __NR_recvmmsg 357 373 - #define __NR_accept4 358 374 - #define __NR_name_to_handle_at 359 375 - #define __NR_open_by_handle_at 360 376 - #define __NR_clock_adjtime 361 377 - #define __NR_syncfs 362 378 - #define __NR_sendmmsg 363 379 - #define __NR_setns 364 380 - #define __NR_process_vm_readv 365 381 - #define __NR_process_vm_writev 366 382 - #define __NR_kcmp 367 383 - #define __NR_finit_module 368 384 - #define __NR_sched_getattr 369 385 - #define __NR_sched_setattr 370 386 - #define __NR_renameat2 371 387 - #define __NR_seccomp 372 388 - #define __NR_getrandom 373 389 - #define __NR_memfd_create 374 390 - #define __NR_bpf 375 391 - #define __NR_execveat 376 392 - #define __NR_userfaultfd 377 393 - #define __NR_membarrier 378 394 - #define __NR_mlock2 379 395 - #define __NR_copy_file_range 380 396 - #define __NR_preadv2 381 397 - #define __NR_pwritev2 382 398 - 399 - #ifdef __KERNEL__ 400 - #define __NR_syscalls 383 401 - #endif 402 - 403 - #endif /* __ASM_SH_UNISTD_32_H */
+16
arch/sh/kernel/syscalls/syscall.tbl
··· 390 390 380 common copy_file_range sys_copy_file_range 391 391 381 common preadv2 sys_preadv2 392 392 382 common pwritev2 sys_pwritev2 393 + 383 common statx sys_statx 394 + 384 common pkey_mprotect sys_pkey_mprotect 395 + 385 common pkey_alloc sys_pkey_alloc 396 + 386 common pkey_free sys_pkey_free 397 + 387 common rseq sys_rseq 398 + # room for arch specific syscalls 399 + 393 common semget sys_semget 400 + 394 common semctl sys_semctl 401 + 395 common shmget sys_shmget 402 + 396 common shmctl sys_shmctl 403 + 397 common shmat sys_shmat 404 + 398 common shmdt sys_shmdt 405 + 399 common msgget sys_msgget 406 + 400 common msgsnd sys_msgsnd 407 + 401 common msgrcv sys_msgrcv 408 + 402 common msgctl sys_msgctl
-5
arch/sparc/include/asm/unistd.h
··· 59 59 #define __IGNORE_getresgid 60 60 #endif 61 61 62 - /* Sparc doesn't have protection keys. */ 63 - #define __IGNORE_pkey_mprotect 64 - #define __IGNORE_pkey_alloc 65 - #define __IGNORE_pkey_free 66 - 67 62 #endif /* _SPARC_UNISTD_H */
+1 -1
arch/sparc/kernel/sys_sparc_64.c
··· 344 344 goto out; 345 345 case SEMTIMEDOP: 346 346 err = sys_semtimedop(first, ptr, (unsigned int)second, 347 - (const struct timespec __user *) 347 + (const struct __kernel_timespec __user *) 348 348 (unsigned long) fifth); 349 349 goto out; 350 350 case SEMGET:
+16
arch/sparc/kernel/syscalls/syscall.tbl
··· 407 407 359 common pwritev2 sys_pwritev2 compat_sys_pwritev2 408 408 360 common statx sys_statx 409 409 361 common io_pgetevents sys_io_pgetevents compat_sys_io_pgetevents 410 + 362 common pkey_mprotect sys_pkey_mprotect 411 + 363 common pkey_alloc sys_pkey_alloc 412 + 364 common pkey_free sys_pkey_free 413 + 365 common rseq sys_rseq 414 + # room for arch specific syscalls 415 + 392 64 semtimedop sys_semtimedop 416 + 393 common semget sys_semget 417 + 394 common semctl sys_semctl compat_sys_semctl 418 + 395 common shmget sys_shmget 419 + 396 common shmctl sys_shmctl compat_sys_shmctl 420 + 397 common shmat sys_shmat compat_sys_shmat 421 + 398 common shmdt sys_shmdt 422 + 399 common msgget sys_msgget 423 + 400 common msgsnd sys_msgsnd compat_sys_msgsnd 424 + 401 common msgrcv sys_msgrcv compat_sys_msgrcv 425 + 402 common msgctl sys_msgctl compat_sys_msgctl
+11
arch/x86/entry/syscalls/syscall_32.tbl
··· 398 398 384 i386 arch_prctl sys_arch_prctl __ia32_compat_sys_arch_prctl 399 399 385 i386 io_pgetevents sys_io_pgetevents __ia32_compat_sys_io_pgetevents 400 400 386 i386 rseq sys_rseq __ia32_sys_rseq 401 + # don't use numbers 387 through 392, add new calls at the end 402 + 393 i386 semget sys_semget __ia32_sys_semget 403 + 394 i386 semctl sys_semctl __ia32_compat_sys_semctl 404 + 395 i386 shmget sys_shmget __ia32_sys_shmget 405 + 396 i386 shmctl sys_shmctl __ia32_compat_sys_shmctl 406 + 397 i386 shmat sys_shmat __ia32_compat_sys_shmat 407 + 398 i386 shmdt sys_shmdt __ia32_sys_shmdt 408 + 399 i386 msgget sys_msgget __ia32_sys_msgget 409 + 400 i386 msgsnd sys_msgsnd __ia32_compat_sys_msgsnd 410 + 401 i386 msgrcv sys_msgrcv __ia32_compat_sys_msgrcv 411 + 402 i386 msgctl sys_msgctl __ia32_compat_sys_msgctl
+2
arch/x86/entry/syscalls/syscall_64.tbl
··· 343 343 332 common statx __x64_sys_statx 344 344 333 common io_pgetevents __x64_sys_io_pgetevents 345 345 334 common rseq __x64_sys_rseq 346 + # don't use numbers 387 through 423, add new calls after the last 347 + # 'common' entry 346 348 347 349 # 348 350 # x32-specific system call numbers start at 512 to avoid cache impact
-12
arch/xtensa/include/asm/unistd.h
··· 10 10 #define __ARCH_WANT_SYS_UTIME 11 11 #define __ARCH_WANT_SYS_GETPGRP 12 12 13 - /* 14 - * Ignore legacy system calls in the checksyscalls.sh script 15 - */ 16 - 17 - #define __IGNORE_fork /* use clone */ 18 - #define __IGNORE_time 19 - #define __IGNORE_alarm /* use setitimer */ 20 - #define __IGNORE_pause 21 - #define __IGNORE_mmap /* use mmap2 */ 22 - #define __IGNORE_vfork /* use clone */ 23 - #define __IGNORE_fadvise64 /* use fadvise64_64 */ 24 - 25 13 #define NR_syscalls __NR_syscalls 26 14 27 15 #endif /* _XTENSA_UNISTD_H */
+4 -3
arch/xtensa/kernel/syscalls/syscall.tbl
··· 103 103 91 common madvise sys_madvise 104 104 92 common shmget sys_shmget 105 105 93 common shmat xtensa_shmat 106 - 94 common shmctl sys_shmctl 106 + 94 common shmctl sys_old_shmctl 107 107 95 common shmdt sys_shmdt 108 108 # Socket Operations 109 109 96 common socket sys_socket ··· 177 177 161 common semtimedop sys_semtimedop 178 178 162 common semget sys_semget 179 179 163 common semop sys_semop 180 - 164 common semctl sys_semctl 180 + 164 common semctl sys_old_semctl 181 181 165 common available165 sys_ni_syscall 182 182 166 common msgget sys_msgget 183 183 167 common msgsnd sys_msgsnd 184 184 168 common msgrcv sys_msgrcv 185 - 169 common msgctl sys_msgctl 185 + 169 common msgctl sys_old_msgctl 186 186 170 common available170 sys_ni_syscall 187 187 # File System 188 188 171 common umount2 sys_umount ··· 372 372 349 common pkey_alloc sys_pkey_alloc 373 373 350 common pkey_free sys_pkey_free 374 374 351 common statx sys_statx 375 + 352 common rseq sys_rseq
+7
include/linux/syscalls.h
··· 717 717 718 718 /* ipc/msg.c */ 719 719 asmlinkage long sys_msgget(key_t key, int msgflg); 720 + asmlinkage long sys_old_msgctl(int msqid, int cmd, struct msqid_ds __user *buf); 720 721 asmlinkage long sys_msgctl(int msqid, int cmd, struct msqid_ds __user *buf); 721 722 asmlinkage long sys_msgrcv(int msqid, struct msgbuf __user *msgp, 722 723 size_t msgsz, long msgtyp, int msgflg); ··· 727 726 /* ipc/sem.c */ 728 727 asmlinkage long sys_semget(key_t key, int nsems, int semflg); 729 728 asmlinkage long sys_semctl(int semid, int semnum, int cmd, unsigned long arg); 729 + asmlinkage long sys_old_semctl(int semid, int semnum, int cmd, unsigned long arg); 730 730 asmlinkage long sys_semtimedop(int semid, struct sembuf __user *sops, 731 731 unsigned nsops, 732 732 const struct __kernel_timespec __user *timeout); ··· 736 734 737 735 /* ipc/shm.c */ 738 736 asmlinkage long sys_shmget(key_t key, size_t size, int flag); 737 + asmlinkage long sys_old_shmctl(int shmid, int cmd, struct shmid_ds __user *buf); 739 738 asmlinkage long sys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf); 740 739 asmlinkage long sys_shmat(int shmid, char __user *shmaddr, int shmflg); 741 740 asmlinkage long sys_shmdt(char __user *shmaddr); ··· 1188 1185 unsigned long prot, unsigned long flags, 1189 1186 unsigned long fd, unsigned long pgoff); 1190 1187 ssize_t ksys_readahead(int fd, loff_t offset, size_t count); 1188 + int ksys_ipc(unsigned int call, int first, unsigned long second, 1189 + unsigned long third, void __user * ptr, long fifth); 1190 + int compat_ksys_ipc(u32 call, int first, int second, 1191 + u32 third, u32 ptr, u32 fifth); 1191 1192 1192 1193 /* 1193 1194 * The following kernel syscall equivalents are just wrappers to fs-internal
+1
include/uapi/asm-generic/unistd.h
··· 740 740 __SYSCALL(__NR_rseq, sys_rseq) 741 741 #define __NR_kexec_file_load 294 742 742 __SYSCALL(__NR_kexec_file_load, sys_kexec_file_load) 743 + /* 295 through 402 are unassigned to sync up with generic numbers, don't use */ 743 744 744 745 #undef __NR_syscalls 745 746 #define __NR_syscalls 295
+32 -7
ipc/msg.c
··· 567 567 return err; 568 568 } 569 569 570 - long ksys_msgctl(int msqid, int cmd, struct msqid_ds __user *buf) 570 + static long ksys_msgctl(int msqid, int cmd, struct msqid_ds __user *buf, int version) 571 571 { 572 - int version; 573 572 struct ipc_namespace *ns; 574 573 struct msqid64_ds msqid64; 575 574 int err; ··· 576 577 if (msqid < 0 || cmd < 0) 577 578 return -EINVAL; 578 579 579 - version = ipc_parse_version(&cmd); 580 580 ns = current->nsproxy->ipc_ns; 581 581 582 582 switch (cmd) { ··· 611 613 612 614 SYSCALL_DEFINE3(msgctl, int, msqid, int, cmd, struct msqid_ds __user *, buf) 613 615 { 614 - return ksys_msgctl(msqid, cmd, buf); 616 + return ksys_msgctl(msqid, cmd, buf, IPC_64); 615 617 } 618 + 619 + #ifdef CONFIG_ARCH_WANT_IPC_PARSE_VERSION 620 + long ksys_old_msgctl(int msqid, int cmd, struct msqid_ds __user *buf) 621 + { 622 + int version = ipc_parse_version(&cmd); 623 + 624 + return ksys_msgctl(msqid, cmd, buf, version); 625 + } 626 + 627 + SYSCALL_DEFINE3(old_msgctl, int, msqid, int, cmd, struct msqid_ds __user *, buf) 628 + { 629 + return ksys_old_msgctl(msqid, cmd, buf); 630 + } 631 + #endif 616 632 617 633 #ifdef CONFIG_COMPAT 618 634 ··· 701 689 } 702 690 } 703 691 704 - long compat_ksys_msgctl(int msqid, int cmd, void __user *uptr) 692 + static long compat_ksys_msgctl(int msqid, int cmd, void __user *uptr, int version) 705 693 { 706 694 struct ipc_namespace *ns; 707 695 int err; 708 696 struct msqid64_ds msqid64; 709 - int version = compat_ipc_parse_version(&cmd); 710 697 711 698 ns = current->nsproxy->ipc_ns; 712 699 ··· 745 734 746 735 COMPAT_SYSCALL_DEFINE3(msgctl, int, msqid, int, cmd, void __user *, uptr) 747 736 { 748 - return compat_ksys_msgctl(msqid, cmd, uptr); 737 + return compat_ksys_msgctl(msqid, cmd, uptr, IPC_64); 749 738 } 739 + 740 + #ifdef CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION 741 + long compat_ksys_old_msgctl(int msqid, int cmd, void __user *uptr) 742 + { 743 + int version = compat_ipc_parse_version(&cmd); 744 + 745 + return compat_ksys_msgctl(msqid, cmd, uptr, version); 746 + } 747 + 748 + COMPAT_SYSCALL_DEFINE3(old_msgctl, int, msqid, int, cmd, void __user *, uptr) 749 + { 750 + return compat_ksys_old_msgctl(msqid, cmd, uptr); 751 + } 752 + #endif 750 753 #endif 751 754 752 755 static int testmsg(struct msg_msg *msg, long type, int mode)
+32 -7
ipc/sem.c
··· 1634 1634 return err; 1635 1635 } 1636 1636 1637 - long ksys_semctl(int semid, int semnum, int cmd, unsigned long arg) 1637 + static long ksys_semctl(int semid, int semnum, int cmd, unsigned long arg, int version) 1638 1638 { 1639 - int version; 1640 1639 struct ipc_namespace *ns; 1641 1640 void __user *p = (void __user *)arg; 1642 1641 struct semid64_ds semid64; ··· 1644 1645 if (semid < 0) 1645 1646 return -EINVAL; 1646 1647 1647 - version = ipc_parse_version(&cmd); 1648 1648 ns = current->nsproxy->ipc_ns; 1649 1649 1650 1650 switch (cmd) { ··· 1689 1691 1690 1692 SYSCALL_DEFINE4(semctl, int, semid, int, semnum, int, cmd, unsigned long, arg) 1691 1693 { 1692 - return ksys_semctl(semid, semnum, cmd, arg); 1694 + return ksys_semctl(semid, semnum, cmd, arg, IPC_64); 1693 1695 } 1696 + 1697 + #ifdef CONFIG_ARCH_WANT_IPC_PARSE_VERSION 1698 + long ksys_old_semctl(int semid, int semnum, int cmd, unsigned long arg) 1699 + { 1700 + int version = ipc_parse_version(&cmd); 1701 + 1702 + return ksys_semctl(semid, semnum, cmd, arg, version); 1703 + } 1704 + 1705 + SYSCALL_DEFINE4(old_semctl, int, semid, int, semnum, int, cmd, unsigned long, arg) 1706 + { 1707 + return ksys_old_semctl(semid, semnum, cmd, arg); 1708 + } 1709 + #endif 1694 1710 1695 1711 #ifdef CONFIG_COMPAT 1696 1712 ··· 1756 1744 } 1757 1745 } 1758 1746 1759 - long compat_ksys_semctl(int semid, int semnum, int cmd, int arg) 1747 + static long compat_ksys_semctl(int semid, int semnum, int cmd, int arg, int version) 1760 1748 { 1761 1749 void __user *p = compat_ptr(arg); 1762 1750 struct ipc_namespace *ns; 1763 1751 struct semid64_ds semid64; 1764 - int version = compat_ipc_parse_version(&cmd); 1765 1752 int err; 1766 1753 1767 1754 ns = current->nsproxy->ipc_ns; ··· 1803 1792 1804 1793 COMPAT_SYSCALL_DEFINE4(semctl, int, semid, int, semnum, int, cmd, int, arg) 1805 1794 { 1806 - return compat_ksys_semctl(semid, semnum, cmd, arg); 1795 + return compat_ksys_semctl(semid, semnum, cmd, arg, IPC_64); 1807 1796 } 1797 + 1798 + #ifdef CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION 1799 + long compat_ksys_old_semctl(int semid, int semnum, int cmd, int arg) 1800 + { 1801 + int version = compat_ipc_parse_version(&cmd); 1802 + 1803 + return compat_ksys_semctl(semid, semnum, cmd, arg, version); 1804 + } 1805 + 1806 + COMPAT_SYSCALL_DEFINE4(old_semctl, int, semid, int, semnum, int, cmd, int, arg) 1807 + { 1808 + return compat_ksys_old_semctl(semid, semnum, cmd, arg); 1809 + } 1810 + #endif 1808 1811 #endif 1809 1812 1810 1813 /* If the task doesn't already have a undo_list, then allocate one
+33 -7
ipc/shm.c
··· 1137 1137 return err; 1138 1138 } 1139 1139 1140 - long ksys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf) 1140 + static long ksys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf, int version) 1141 1141 { 1142 - int err, version; 1142 + int err; 1143 1143 struct ipc_namespace *ns; 1144 1144 struct shmid64_ds sem64; 1145 1145 1146 1146 if (cmd < 0 || shmid < 0) 1147 1147 return -EINVAL; 1148 1148 1149 - version = ipc_parse_version(&cmd); 1150 1149 ns = current->nsproxy->ipc_ns; 1151 1150 1152 1151 switch (cmd) { ··· 1193 1194 1194 1195 SYSCALL_DEFINE3(shmctl, int, shmid, int, cmd, struct shmid_ds __user *, buf) 1195 1196 { 1196 - return ksys_shmctl(shmid, cmd, buf); 1197 + return ksys_shmctl(shmid, cmd, buf, IPC_64); 1197 1198 } 1199 + 1200 + #ifdef CONFIG_ARCH_WANT_IPC_PARSE_VERSION 1201 + long ksys_old_shmctl(int shmid, int cmd, struct shmid_ds __user *buf) 1202 + { 1203 + int version = ipc_parse_version(&cmd); 1204 + 1205 + return ksys_shmctl(shmid, cmd, buf, version); 1206 + } 1207 + 1208 + SYSCALL_DEFINE3(old_shmctl, int, shmid, int, cmd, struct shmid_ds __user *, buf) 1209 + { 1210 + return ksys_old_shmctl(shmid, cmd, buf); 1211 + } 1212 + #endif 1198 1213 1199 1214 #ifdef CONFIG_COMPAT 1200 1215 ··· 1332 1319 } 1333 1320 } 1334 1321 1335 - long compat_ksys_shmctl(int shmid, int cmd, void __user *uptr) 1322 + long compat_ksys_shmctl(int shmid, int cmd, void __user *uptr, int version) 1336 1323 { 1337 1324 struct ipc_namespace *ns; 1338 1325 struct shmid64_ds sem64; 1339 - int version = compat_ipc_parse_version(&cmd); 1340 1326 int err; 1341 1327 1342 1328 ns = current->nsproxy->ipc_ns; ··· 1390 1378 1391 1379 COMPAT_SYSCALL_DEFINE3(shmctl, int, shmid, int, cmd, void __user *, uptr) 1392 1380 { 1393 - return compat_ksys_shmctl(shmid, cmd, uptr); 1381 + return compat_ksys_shmctl(shmid, cmd, uptr, IPC_64); 1394 1382 } 1383 + 1384 + #ifdef CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION 1385 + long compat_ksys_old_shmctl(int shmid, int cmd, void __user *uptr) 1386 + { 1387 + int version = compat_ipc_parse_version(&cmd); 1388 + 1389 + return compat_ksys_shmctl(shmid, cmd, uptr, version); 1390 + } 1391 + 1392 + COMPAT_SYSCALL_DEFINE3(old_shmctl, int, shmid, int, cmd, void __user *, uptr) 1393 + { 1394 + return compat_ksys_old_shmctl(shmid, cmd, uptr); 1395 + } 1396 + #endif 1395 1397 #endif 1396 1398 1397 1399 /*
+22 -10
ipc/syscall.c
··· 17 17 #include <linux/shm.h> 18 18 #include <linux/uaccess.h> 19 19 20 - SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, unsigned long, second, 21 - unsigned long, third, void __user *, ptr, long, fifth) 20 + int ksys_ipc(unsigned int call, int first, unsigned long second, 21 + unsigned long third, void __user * ptr, long fifth) 22 22 { 23 23 int version, ret; 24 24 ··· 47 47 return -EINVAL; 48 48 if (get_user(arg, (unsigned long __user *) ptr)) 49 49 return -EFAULT; 50 - return ksys_semctl(first, second, third, arg); 50 + return ksys_old_semctl(first, second, third, arg); 51 51 } 52 52 53 53 case MSGSND: ··· 75 75 case MSGGET: 76 76 return ksys_msgget((key_t) first, second); 77 77 case MSGCTL: 78 - return ksys_msgctl(first, second, 78 + return ksys_old_msgctl(first, second, 79 79 (struct msqid_ds __user *)ptr); 80 80 81 81 case SHMAT: ··· 100 100 case SHMGET: 101 101 return ksys_shmget(first, second, third); 102 102 case SHMCTL: 103 - return ksys_shmctl(first, second, 103 + return ksys_old_shmctl(first, second, 104 104 (struct shmid_ds __user *) ptr); 105 105 default: 106 106 return -ENOSYS; 107 107 } 108 + } 109 + 110 + SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, unsigned long, second, 111 + unsigned long, third, void __user *, ptr, long, fifth) 112 + { 113 + return ksys_ipc(call, first, second, third, ptr, fifth); 108 114 } 109 115 #endif 110 116 ··· 127 121 }; 128 122 129 123 #ifdef CONFIG_ARCH_WANT_OLD_COMPAT_IPC 130 - COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second, 131 - u32, third, compat_uptr_t, ptr, u32, fifth) 124 + int compat_ksys_ipc(u32 call, int first, int second, 125 + u32 third, compat_uptr_t ptr, u32 fifth) 132 126 { 133 127 int version; 134 128 u32 pad; ··· 152 146 return -EINVAL; 153 147 if (get_user(pad, (u32 __user *) compat_ptr(ptr))) 154 148 return -EFAULT; 155 - return compat_ksys_semctl(first, second, third, pad); 149 + return compat_ksys_old_semctl(first, second, third, pad); 156 150 157 151 case MSGSND: 158 152 return compat_ksys_msgsnd(first, ptr, second, third); ··· 177 171 case MSGGET: 178 172 return ksys_msgget(first, second); 179 173 case MSGCTL: 180 - return compat_ksys_msgctl(first, second, compat_ptr(ptr)); 174 + return compat_ksys_old_msgctl(first, second, compat_ptr(ptr)); 181 175 182 176 case SHMAT: { 183 177 int err; ··· 196 190 case SHMGET: 197 191 return ksys_shmget(first, (unsigned int)second, third); 198 192 case SHMCTL: 199 - return compat_ksys_shmctl(first, second, compat_ptr(ptr)); 193 + return compat_ksys_old_shmctl(first, second, compat_ptr(ptr)); 200 194 } 201 195 202 196 return -ENOSYS; 197 + } 198 + 199 + COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second, 200 + u32, third, compat_uptr_t, ptr, u32, fifth) 201 + { 202 + return compat_ksys_ipc(call, first, second, third, ptr, fifth); 203 203 } 204 204 #endif 205 205 #endif
+7 -14
ipc/util.h
··· 160 160 } 161 161 } 162 162 163 - #ifndef CONFIG_ARCH_WANT_IPC_PARSE_VERSION 164 - /* On IA-64, we always use the "64-bit version" of the IPC structures. */ 165 - # define ipc_parse_version(cmd) IPC_64 166 - #else 163 + #ifdef CONFIG_ARCH_WANT_IPC_PARSE_VERSION 167 164 int ipc_parse_version(int *cmd); 168 165 #endif 169 166 ··· 243 246 244 247 static inline int compat_ipc_parse_version(int *cmd) 245 248 { 246 - #ifdef CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION 247 249 int version = *cmd & IPC_64; 248 250 *cmd &= ~IPC_64; 249 251 return version; 250 - #else 251 - return IPC_64; 252 - #endif 253 252 } 254 253 #endif 255 254 ··· 254 261 unsigned int nsops, 255 262 const struct __kernel_timespec __user *timeout); 256 263 long ksys_semget(key_t key, int nsems, int semflg); 257 - long ksys_semctl(int semid, int semnum, int cmd, unsigned long arg); 264 + long ksys_old_semctl(int semid, int semnum, int cmd, unsigned long arg); 258 265 long ksys_msgget(key_t key, int msgflg); 259 - long ksys_msgctl(int msqid, int cmd, struct msqid_ds __user *buf); 266 + long ksys_old_msgctl(int msqid, int cmd, struct msqid_ds __user *buf); 260 267 long ksys_msgrcv(int msqid, struct msgbuf __user *msgp, size_t msgsz, 261 268 long msgtyp, int msgflg); 262 269 long ksys_msgsnd(int msqid, struct msgbuf __user *msgp, size_t msgsz, 263 270 int msgflg); 264 271 long ksys_shmget(key_t key, size_t size, int shmflg); 265 272 long ksys_shmdt(char __user *shmaddr); 266 - long ksys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf); 273 + long ksys_old_shmctl(int shmid, int cmd, struct shmid_ds __user *buf); 267 274 268 275 /* for CONFIG_ARCH_WANT_OLD_COMPAT_IPC */ 269 276 long compat_ksys_semtimedop(int semid, struct sembuf __user *tsems, 270 277 unsigned int nsops, 271 278 const struct old_timespec32 __user *timeout); 272 279 #ifdef CONFIG_COMPAT 273 - long compat_ksys_semctl(int semid, int semnum, int cmd, int arg); 274 - long compat_ksys_msgctl(int msqid, int cmd, void __user *uptr); 280 + long compat_ksys_old_semctl(int semid, int semnum, int cmd, int arg); 281 + long compat_ksys_old_msgctl(int msqid, int cmd, void __user *uptr); 275 282 long compat_ksys_msgrcv(int msqid, compat_uptr_t msgp, compat_ssize_t msgsz, 276 283 compat_long_t msgtyp, int msgflg); 277 284 long compat_ksys_msgsnd(int msqid, compat_uptr_t msgp, 278 285 compat_ssize_t msgsz, int msgflg); 279 - long compat_ksys_shmctl(int shmid, int cmd, void __user *uptr); 286 + long compat_ksys_old_shmctl(int shmid, int cmd, void __user *uptr); 280 287 #endif /* CONFIG_COMPAT */ 281 288 282 289 #endif
+4
kernel/sys_ni.c
··· 197 197 198 198 /* ipc/msg.c */ 199 199 COND_SYSCALL(msgget); 200 + COND_SYSCALL(old_msgctl); 200 201 COND_SYSCALL(msgctl); 201 202 COND_SYSCALL_COMPAT(msgctl); 202 203 COND_SYSCALL(msgrcv); ··· 207 206 208 207 /* ipc/sem.c */ 209 208 COND_SYSCALL(semget); 209 + COND_SYSCALL(old_semctl); 210 210 COND_SYSCALL(semctl); 211 211 COND_SYSCALL_COMPAT(semctl); 212 212 COND_SYSCALL(semtimedop); ··· 216 214 217 215 /* ipc/shm.c */ 218 216 COND_SYSCALL(shmget); 217 + COND_SYSCALL(old_shmctl); 219 218 COND_SYSCALL(shmctl); 220 219 COND_SYSCALL_COMPAT(shmctl); 221 220 COND_SYSCALL(shmat); ··· 369 366 /* s390 */ 370 367 COND_SYSCALL(s390_pci_mmio_read); 371 368 COND_SYSCALL(s390_pci_mmio_write); 369 + COND_SYSCALL(s390_ipc); 372 370 COND_SYSCALL_COMPAT(s390_ipc); 373 371 374 372 /* powerpc */