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

compat: fixes to allow working with tile arch

The existing <asm-generic/unistd.h> mechanism doesn't really provide
enough to create the 64-bit "compat" ABI properly in a generic way,
since the compat ABI is a mix of things were you can re-use the 64-bit
versions of syscalls and things where you need a compat wrapper.

To provide this in the most direct way possible, I added two new macros
to go along with the existing __SYSCALL and __SC_3264 macros: __SC_COMP
and SC_COMP_3264. These macros take an additional argument, typically a
"compat_sys_xxx" function, which is passed to __SYSCALL if you define
__SYSCALL_COMPAT when including the header, resulting in a pointer to
the compat function being placed in the generated syscall table.

The change also adds some missing definitions to <linux/compat.h> so that
it actually has declarations for all the compat syscalls, since the
"[nr] = ##call" approach requires proper C declarations for all the
functions included in the syscall table.

Finally, compat.c defines compat_sys_sigpending() and
compat_sys_sigprocmask() even if the underlying architecture doesn't
request it, which tries to pull in undefined compat_old_sigset_t defines.
We need to guard those compat syscall definitions with appropriate
__ARCH_WANT_SYS_xxx ifdefs.

Acked-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>

+320 -98
+1 -1
arch/tile/kernel/compat.c
··· 135 135 136 136 /* Provide the compat syscall number to call mapping. */ 137 137 #undef __SYSCALL 138 - #define __SYSCALL(nr, call) [nr] = (compat_##call), 138 + #define __SYSCALL(nr, call) [nr] = (call), 139 139 140 140 /* The generic versions of these don't work for Tile. */ 141 141 #define compat_sys_msgrcv tile_compat_sys_msgrcv
+124 -97
include/asm-generic/unistd.h
··· 24 24 #define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _64) 25 25 #endif 26 26 27 + #ifdef __SYSCALL_COMPAT 28 + #define __SC_COMP(_nr, _sys, _comp) __SYSCALL(_nr, _comp) 29 + #define __SC_COMP_3264(_nr, _32, _64, _comp) __SYSCALL(_nr, _comp) 30 + #else 31 + #define __SC_COMP(_nr, _sys, _comp) __SYSCALL(_nr, _sys) 32 + #define __SC_COMP_3264(_nr, _32, _64, _comp) __SC_3264(_nr, _32, _64) 33 + #endif 34 + 27 35 #define __NR_io_setup 0 28 - __SYSCALL(__NR_io_setup, sys_io_setup) 36 + __SC_COMP(__NR_io_setup, sys_io_setup, compat_sys_io_setup) 29 37 #define __NR_io_destroy 1 30 38 __SYSCALL(__NR_io_destroy, sys_io_destroy) 31 39 #define __NR_io_submit 2 32 - __SYSCALL(__NR_io_submit, sys_io_submit) 40 + __SC_COMP(__NR_io_submit, sys_io_submit, compat_sys_io_submit) 33 41 #define __NR_io_cancel 3 34 42 __SYSCALL(__NR_io_cancel, sys_io_cancel) 35 43 #define __NR_io_getevents 4 36 - __SYSCALL(__NR_io_getevents, sys_io_getevents) 44 + __SC_COMP(__NR_io_getevents, sys_io_getevents, compat_sys_io_getevents) 37 45 38 46 /* fs/xattr.c */ 39 47 #define __NR_setxattr 5 ··· 75 67 76 68 /* fs/cookies.c */ 77 69 #define __NR_lookup_dcookie 18 78 - __SYSCALL(__NR_lookup_dcookie, sys_lookup_dcookie) 70 + __SC_COMP(__NR_lookup_dcookie, sys_lookup_dcookie, compat_sys_lookup_dcookie) 79 71 80 72 /* fs/eventfd.c */ 81 73 #define __NR_eventfd2 19 ··· 87 79 #define __NR_epoll_ctl 21 88 80 __SYSCALL(__NR_epoll_ctl, sys_epoll_ctl) 89 81 #define __NR_epoll_pwait 22 90 - __SYSCALL(__NR_epoll_pwait, sys_epoll_pwait) 82 + __SC_COMP(__NR_epoll_pwait, sys_epoll_pwait, compat_sys_epoll_pwait) 91 83 92 84 /* fs/fcntl.c */ 93 85 #define __NR_dup 23 ··· 95 87 #define __NR_dup3 24 96 88 __SYSCALL(__NR_dup3, sys_dup3) 97 89 #define __NR3264_fcntl 25 98 - __SC_3264(__NR3264_fcntl, sys_fcntl64, sys_fcntl) 90 + __SC_COMP_3264(__NR3264_fcntl, sys_fcntl64, sys_fcntl, compat_sys_fcntl64) 99 91 100 92 /* fs/inotify_user.c */ 101 93 #define __NR_inotify_init1 26 ··· 107 99 108 100 /* fs/ioctl.c */ 109 101 #define __NR_ioctl 29 110 - __SYSCALL(__NR_ioctl, sys_ioctl) 102 + __SC_COMP(__NR_ioctl, sys_ioctl, compat_sys_ioctl) 111 103 112 104 /* fs/ioprio.c */ 113 105 #define __NR_ioprio_set 30 ··· 137 129 #define __NR_umount2 39 138 130 __SYSCALL(__NR_umount2, sys_umount) 139 131 #define __NR_mount 40 140 - __SYSCALL(__NR_mount, sys_mount) 132 + __SC_COMP(__NR_mount, sys_mount, compat_sys_mount) 141 133 #define __NR_pivot_root 41 142 134 __SYSCALL(__NR_pivot_root, sys_pivot_root) 143 135 144 136 /* fs/nfsctl.c */ 145 137 #define __NR_nfsservctl 42 146 - __SYSCALL(__NR_nfsservctl, sys_nfsservctl) 138 + __SC_COMP(__NR_nfsservctl, sys_nfsservctl, compat_sys_nfsservctl) 147 139 148 140 /* fs/open.c */ 149 141 #define __NR3264_statfs 43 150 - __SC_3264(__NR3264_statfs, sys_statfs64, sys_statfs) 142 + __SC_COMP_3264(__NR3264_statfs, sys_statfs64, sys_statfs, \ 143 + compat_sys_statfs64) 151 144 #define __NR3264_fstatfs 44 152 - __SC_3264(__NR3264_fstatfs, sys_fstatfs64, sys_fstatfs) 145 + __SC_COMP_3264(__NR3264_fstatfs, sys_fstatfs64, sys_fstatfs, \ 146 + compat_sys_fstatfs64) 153 147 #define __NR3264_truncate 45 154 - __SC_3264(__NR3264_truncate, sys_truncate64, sys_truncate) 148 + __SC_COMP_3264(__NR3264_truncate, sys_truncate64, sys_truncate, \ 149 + compat_sys_truncate64) 155 150 #define __NR3264_ftruncate 46 156 - __SC_3264(__NR3264_ftruncate, sys_ftruncate64, sys_ftruncate) 151 + __SC_COMP_3264(__NR3264_ftruncate, sys_ftruncate64, sys_ftruncate, \ 152 + compat_sys_ftruncate64) 157 153 158 154 #define __NR_fallocate 47 159 - __SYSCALL(__NR_fallocate, sys_fallocate) 155 + __SC_COMP(__NR_fallocate, sys_fallocate, compat_sys_fallocate) 160 156 #define __NR_faccessat 48 161 157 __SYSCALL(__NR_faccessat, sys_faccessat) 162 158 #define __NR_chdir 49 ··· 178 166 #define __NR_fchown 55 179 167 __SYSCALL(__NR_fchown, sys_fchown) 180 168 #define __NR_openat 56 181 - __SYSCALL(__NR_openat, sys_openat) 169 + __SC_COMP(__NR_openat, sys_openat, compat_sys_openat) 182 170 #define __NR_close 57 183 171 __SYSCALL(__NR_close, sys_close) 184 172 #define __NR_vhangup 58 ··· 194 182 195 183 /* fs/readdir.c */ 196 184 #define __NR_getdents64 61 197 - __SYSCALL(__NR_getdents64, sys_getdents64) 185 + __SC_COMP(__NR_getdents64, sys_getdents64, compat_sys_getdents64) 198 186 199 187 /* fs/read_write.c */ 200 188 #define __NR3264_lseek 62 ··· 204 192 #define __NR_write 64 205 193 __SYSCALL(__NR_write, sys_write) 206 194 #define __NR_readv 65 207 - __SYSCALL(__NR_readv, sys_readv) 195 + __SC_COMP(__NR_readv, sys_readv, compat_sys_readv) 208 196 #define __NR_writev 66 209 - __SYSCALL(__NR_writev, sys_writev) 197 + __SC_COMP(__NR_writev, sys_writev, compat_sys_writev) 210 198 #define __NR_pread64 67 211 - __SYSCALL(__NR_pread64, sys_pread64) 199 + __SC_COMP(__NR_pread64, sys_pread64, compat_sys_pread64) 212 200 #define __NR_pwrite64 68 213 - __SYSCALL(__NR_pwrite64, sys_pwrite64) 201 + __SC_COMP(__NR_pwrite64, sys_pwrite64, compat_sys_pwrite64) 214 202 #define __NR_preadv 69 215 - __SYSCALL(__NR_preadv, sys_preadv) 203 + __SC_COMP(__NR_preadv, sys_preadv, compat_sys_preadv) 216 204 #define __NR_pwritev 70 217 - __SYSCALL(__NR_pwritev, sys_pwritev) 205 + __SC_COMP(__NR_pwritev, sys_pwritev, compat_sys_pwritev) 218 206 219 207 /* fs/sendfile.c */ 220 208 #define __NR3264_sendfile 71 ··· 222 210 223 211 /* fs/select.c */ 224 212 #define __NR_pselect6 72 225 - __SYSCALL(__NR_pselect6, sys_pselect6) 213 + __SC_COMP(__NR_pselect6, sys_pselect6, compat_sys_pselect6) 226 214 #define __NR_ppoll 73 227 - __SYSCALL(__NR_ppoll, sys_ppoll) 215 + __SC_COMP(__NR_ppoll, sys_ppoll, compat_sys_ppoll) 228 216 229 217 /* fs/signalfd.c */ 230 218 #define __NR_signalfd4 74 231 - __SYSCALL(__NR_signalfd4, sys_signalfd4) 219 + __SC_COMP(__NR_signalfd4, sys_signalfd4, compat_sys_signalfd4) 232 220 233 221 /* fs/splice.c */ 234 222 #define __NR_vmsplice 75 235 - __SYSCALL(__NR_vmsplice, sys_vmsplice) 223 + __SC_COMP(__NR_vmsplice, sys_vmsplice, compat_sys_vmsplice) 236 224 #define __NR_splice 76 237 225 __SYSCALL(__NR_splice, sys_splice) 238 226 #define __NR_tee 77 ··· 255 243 __SYSCALL(__NR_fdatasync, sys_fdatasync) 256 244 #ifdef __ARCH_WANT_SYNC_FILE_RANGE2 257 245 #define __NR_sync_file_range2 84 258 - __SYSCALL(__NR_sync_file_range2, sys_sync_file_range2) 246 + __SC_COMP(__NR_sync_file_range2, sys_sync_file_range2, \ 247 + compat_sys_sync_file_range2) 259 248 #else 260 249 #define __NR_sync_file_range 84 261 - __SYSCALL(__NR_sync_file_range, sys_sync_file_range) 250 + __SC_COMP(__NR_sync_file_range, sys_sync_file_range, \ 251 + compat_sys_sync_file_range) 262 252 #endif 263 253 264 254 /* fs/timerfd.c */ 265 255 #define __NR_timerfd_create 85 266 256 __SYSCALL(__NR_timerfd_create, sys_timerfd_create) 267 257 #define __NR_timerfd_settime 86 268 - __SYSCALL(__NR_timerfd_settime, sys_timerfd_settime) 258 + __SC_COMP(__NR_timerfd_settime, sys_timerfd_settime, \ 259 + compat_sys_timerfd_settime) 269 260 #define __NR_timerfd_gettime 87 270 - __SYSCALL(__NR_timerfd_gettime, sys_timerfd_gettime) 261 + __SC_COMP(__NR_timerfd_gettime, sys_timerfd_gettime, \ 262 + compat_sys_timerfd_gettime) 271 263 272 264 /* fs/utimes.c */ 273 265 #define __NR_utimensat 88 274 - __SYSCALL(__NR_utimensat, sys_utimensat) 266 + __SC_COMP(__NR_utimensat, sys_utimensat, compat_sys_utimensat) 275 267 276 268 /* kernel/acct.c */ 277 269 #define __NR_acct 89 ··· 297 281 #define __NR_exit_group 94 298 282 __SYSCALL(__NR_exit_group, sys_exit_group) 299 283 #define __NR_waitid 95 300 - __SYSCALL(__NR_waitid, sys_waitid) 284 + __SC_COMP(__NR_waitid, sys_waitid, compat_sys_waitid) 301 285 302 286 /* kernel/fork.c */ 303 287 #define __NR_set_tid_address 96 ··· 307 291 308 292 /* kernel/futex.c */ 309 293 #define __NR_futex 98 310 - __SYSCALL(__NR_futex, sys_futex) 294 + __SC_COMP(__NR_futex, sys_futex, compat_sys_futex) 311 295 #define __NR_set_robust_list 99 312 - __SYSCALL(__NR_set_robust_list, sys_set_robust_list) 296 + __SC_COMP(__NR_set_robust_list, sys_set_robust_list, \ 297 + compat_sys_set_robust_list) 313 298 #define __NR_get_robust_list 100 314 - __SYSCALL(__NR_get_robust_list, sys_get_robust_list) 299 + __SC_COMP(__NR_get_robust_list, sys_get_robust_list, \ 300 + compat_sys_get_robust_list) 315 301 316 302 /* kernel/hrtimer.c */ 317 303 #define __NR_nanosleep 101 318 - __SYSCALL(__NR_nanosleep, sys_nanosleep) 304 + __SC_COMP(__NR_nanosleep, sys_nanosleep, compat_sys_nanosleep) 319 305 320 306 /* kernel/itimer.c */ 321 307 #define __NR_getitimer 102 322 - __SYSCALL(__NR_getitimer, sys_getitimer) 308 + __SC_COMP(__NR_getitimer, sys_getitimer, compat_sys_getitimer) 323 309 #define __NR_setitimer 103 324 - __SYSCALL(__NR_setitimer, sys_setitimer) 310 + __SC_COMP(__NR_setitimer, sys_setitimer, compat_sys_setitimer) 325 311 326 312 /* kernel/kexec.c */ 327 313 #define __NR_kexec_load 104 328 - __SYSCALL(__NR_kexec_load, sys_kexec_load) 314 + __SC_COMP(__NR_kexec_load, sys_kexec_load, compat_sys_kexec_load) 329 315 330 316 /* kernel/module.c */ 331 317 #define __NR_init_module 105 ··· 337 319 338 320 /* kernel/posix-timers.c */ 339 321 #define __NR_timer_create 107 340 - __SYSCALL(__NR_timer_create, sys_timer_create) 322 + __SC_COMP(__NR_timer_create, sys_timer_create, compat_sys_timer_create) 341 323 #define __NR_timer_gettime 108 342 - __SYSCALL(__NR_timer_gettime, sys_timer_gettime) 324 + __SC_COMP(__NR_timer_gettime, sys_timer_gettime, compat_sys_timer_gettime) 343 325 #define __NR_timer_getoverrun 109 344 326 __SYSCALL(__NR_timer_getoverrun, sys_timer_getoverrun) 345 327 #define __NR_timer_settime 110 346 - __SYSCALL(__NR_timer_settime, sys_timer_settime) 328 + __SC_COMP(__NR_timer_settime, sys_timer_settime, compat_sys_timer_settime) 347 329 #define __NR_timer_delete 111 348 330 __SYSCALL(__NR_timer_delete, sys_timer_delete) 349 331 #define __NR_clock_settime 112 350 - __SYSCALL(__NR_clock_settime, sys_clock_settime) 332 + __SC_COMP(__NR_clock_settime, sys_clock_settime, compat_sys_clock_settime) 351 333 #define __NR_clock_gettime 113 352 - __SYSCALL(__NR_clock_gettime, sys_clock_gettime) 334 + __SC_COMP(__NR_clock_gettime, sys_clock_gettime, compat_sys_clock_gettime) 353 335 #define __NR_clock_getres 114 354 - __SYSCALL(__NR_clock_getres, sys_clock_getres) 336 + __SC_COMP(__NR_clock_getres, sys_clock_getres, compat_sys_clock_getres) 355 337 #define __NR_clock_nanosleep 115 356 - __SYSCALL(__NR_clock_nanosleep, sys_clock_nanosleep) 338 + __SC_COMP(__NR_clock_nanosleep, sys_clock_nanosleep, \ 339 + compat_sys_clock_nanosleep) 357 340 358 341 /* kernel/printk.c */ 359 342 #define __NR_syslog 116 ··· 374 355 #define __NR_sched_getparam 121 375 356 __SYSCALL(__NR_sched_getparam, sys_sched_getparam) 376 357 #define __NR_sched_setaffinity 122 377 - __SYSCALL(__NR_sched_setaffinity, sys_sched_setaffinity) 358 + __SC_COMP(__NR_sched_setaffinity, sys_sched_setaffinity, \ 359 + compat_sys_sched_setaffinity) 378 360 #define __NR_sched_getaffinity 123 379 - __SYSCALL(__NR_sched_getaffinity, sys_sched_getaffinity) 361 + __SC_COMP(__NR_sched_getaffinity, sys_sched_getaffinity, \ 362 + compat_sys_sched_getaffinity) 380 363 #define __NR_sched_yield 124 381 364 __SYSCALL(__NR_sched_yield, sys_sched_yield) 382 365 #define __NR_sched_get_priority_max 125 ··· 386 365 #define __NR_sched_get_priority_min 126 387 366 __SYSCALL(__NR_sched_get_priority_min, sys_sched_get_priority_min) 388 367 #define __NR_sched_rr_get_interval 127 389 - __SYSCALL(__NR_sched_rr_get_interval, sys_sched_rr_get_interval) 368 + __SC_COMP(__NR_sched_rr_get_interval, sys_sched_rr_get_interval, \ 369 + compat_sys_sched_rr_get_interval) 390 370 391 371 /* kernel/signal.c */ 392 372 #define __NR_restart_syscall 128 ··· 399 377 #define __NR_tgkill 131 400 378 __SYSCALL(__NR_tgkill, sys_tgkill) 401 379 #define __NR_sigaltstack 132 402 - __SYSCALL(__NR_sigaltstack, sys_sigaltstack) 380 + __SC_COMP(__NR_sigaltstack, sys_sigaltstack, compat_sys_sigaltstack) 403 381 #define __NR_rt_sigsuspend 133 404 - __SYSCALL(__NR_rt_sigsuspend, sys_rt_sigsuspend) /* __ARCH_WANT_SYS_RT_SIGSUSPEND */ 382 + __SC_COMP(__NR_rt_sigsuspend, sys_rt_sigsuspend, compat_sys_rt_sigsuspend) 405 383 #define __NR_rt_sigaction 134 406 - __SYSCALL(__NR_rt_sigaction, sys_rt_sigaction) /* __ARCH_WANT_SYS_RT_SIGACTION */ 384 + __SC_COMP(__NR_rt_sigaction, sys_rt_sigaction, compat_sys_rt_sigaction) 407 385 #define __NR_rt_sigprocmask 135 408 386 __SYSCALL(__NR_rt_sigprocmask, sys_rt_sigprocmask) 409 387 #define __NR_rt_sigpending 136 410 388 __SYSCALL(__NR_rt_sigpending, sys_rt_sigpending) 411 389 #define __NR_rt_sigtimedwait 137 412 - __SYSCALL(__NR_rt_sigtimedwait, sys_rt_sigtimedwait) 390 + __SC_COMP(__NR_rt_sigtimedwait, sys_rt_sigtimedwait, \ 391 + compat_sys_rt_sigtimedwait) 413 392 #define __NR_rt_sigqueueinfo 138 414 - __SYSCALL(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo) 393 + __SC_COMP(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo, \ 394 + compat_sys_rt_sigqueueinfo) 415 395 #define __NR_rt_sigreturn 139 416 - __SYSCALL(__NR_rt_sigreturn, sys_rt_sigreturn) /* sys_rt_sigreturn_wrapper, */ 396 + __SC_COMP(__NR_rt_sigreturn, sys_rt_sigreturn, compat_sys_rt_sigreturn) 417 397 418 398 /* kernel/sys.c */ 419 399 #define __NR_setpriority 140 ··· 445 421 #define __NR_setfsgid 152 446 422 __SYSCALL(__NR_setfsgid, sys_setfsgid) 447 423 #define __NR_times 153 448 - __SYSCALL(__NR_times, sys_times) 424 + __SC_COMP(__NR_times, sys_times, compat_sys_times) 449 425 #define __NR_setpgid 154 450 426 __SYSCALL(__NR_setpgid, sys_setpgid) 451 427 #define __NR_getpgid 155 ··· 465 441 #define __NR_setdomainname 162 466 442 __SYSCALL(__NR_setdomainname, sys_setdomainname) 467 443 #define __NR_getrlimit 163 468 - __SYSCALL(__NR_getrlimit, sys_getrlimit) 444 + __SC_COMP(__NR_getrlimit, sys_getrlimit, compat_sys_getrlimit) 469 445 #define __NR_setrlimit 164 470 - __SYSCALL(__NR_setrlimit, sys_setrlimit) 446 + __SC_COMP(__NR_setrlimit, sys_setrlimit, compat_sys_setrlimit) 471 447 #define __NR_getrusage 165 472 - __SYSCALL(__NR_getrusage, sys_getrusage) 448 + __SC_COMP(__NR_getrusage, sys_getrusage, compat_sys_getrusage) 473 449 #define __NR_umask 166 474 450 __SYSCALL(__NR_umask, sys_umask) 475 451 #define __NR_prctl 167 ··· 479 455 480 456 /* kernel/time.c */ 481 457 #define __NR_gettimeofday 169 482 - __SYSCALL(__NR_gettimeofday, sys_gettimeofday) 458 + __SC_COMP(__NR_gettimeofday, sys_gettimeofday, compat_sys_gettimeofday) 483 459 #define __NR_settimeofday 170 484 - __SYSCALL(__NR_settimeofday, sys_settimeofday) 460 + __SC_COMP(__NR_settimeofday, sys_settimeofday, compat_sys_settimeofday) 485 461 #define __NR_adjtimex 171 486 - __SYSCALL(__NR_adjtimex, sys_adjtimex) 462 + __SC_COMP(__NR_adjtimex, sys_adjtimex, compat_sys_adjtimex) 487 463 488 464 /* kernel/timer.c */ 489 465 #define __NR_getpid 172 ··· 501 477 #define __NR_gettid 178 502 478 __SYSCALL(__NR_gettid, sys_gettid) 503 479 #define __NR_sysinfo 179 504 - __SYSCALL(__NR_sysinfo, sys_sysinfo) 480 + __SC_COMP(__NR_sysinfo, sys_sysinfo, compat_sys_sysinfo) 505 481 506 482 /* ipc/mqueue.c */ 507 483 #define __NR_mq_open 180 508 - __SYSCALL(__NR_mq_open, sys_mq_open) 484 + __SC_COMP(__NR_mq_open, sys_mq_open, compat_sys_mq_open) 509 485 #define __NR_mq_unlink 181 510 486 __SYSCALL(__NR_mq_unlink, sys_mq_unlink) 511 487 #define __NR_mq_timedsend 182 512 - __SYSCALL(__NR_mq_timedsend, sys_mq_timedsend) 488 + __SC_COMP(__NR_mq_timedsend, sys_mq_timedsend, compat_sys_mq_timedsend) 513 489 #define __NR_mq_timedreceive 183 514 - __SYSCALL(__NR_mq_timedreceive, sys_mq_timedreceive) 490 + __SC_COMP(__NR_mq_timedreceive, sys_mq_timedreceive, \ 491 + compat_sys_mq_timedreceive) 515 492 #define __NR_mq_notify 184 516 - __SYSCALL(__NR_mq_notify, sys_mq_notify) 493 + __SC_COMP(__NR_mq_notify, sys_mq_notify, compat_sys_mq_notify) 517 494 #define __NR_mq_getsetattr 185 518 - __SYSCALL(__NR_mq_getsetattr, sys_mq_getsetattr) 495 + __SC_COMP(__NR_mq_getsetattr, sys_mq_getsetattr, compat_sys_mq_getsetattr) 519 496 520 497 /* ipc/msg.c */ 521 498 #define __NR_msgget 186 522 499 __SYSCALL(__NR_msgget, sys_msgget) 523 500 #define __NR_msgctl 187 524 - __SYSCALL(__NR_msgctl, sys_msgctl) 501 + __SC_COMP(__NR_msgctl, sys_msgctl, compat_sys_msgctl) 525 502 #define __NR_msgrcv 188 526 - __SYSCALL(__NR_msgrcv, sys_msgrcv) 503 + __SC_COMP(__NR_msgrcv, sys_msgrcv, compat_sys_msgrcv) 527 504 #define __NR_msgsnd 189 528 - __SYSCALL(__NR_msgsnd, sys_msgsnd) 505 + __SC_COMP(__NR_msgsnd, sys_msgsnd, compat_sys_msgsnd) 529 506 530 507 /* ipc/sem.c */ 531 508 #define __NR_semget 190 532 509 __SYSCALL(__NR_semget, sys_semget) 533 510 #define __NR_semctl 191 534 - __SYSCALL(__NR_semctl, sys_semctl) 511 + __SC_COMP(__NR_semctl, sys_semctl, compat_sys_semctl) 535 512 #define __NR_semtimedop 192 536 - __SYSCALL(__NR_semtimedop, sys_semtimedop) 513 + __SC_COMP(__NR_semtimedop, sys_semtimedop, compat_sys_semtimedop) 537 514 #define __NR_semop 193 538 515 __SYSCALL(__NR_semop, sys_semop) 539 516 ··· 542 517 #define __NR_shmget 194 543 518 __SYSCALL(__NR_shmget, sys_shmget) 544 519 #define __NR_shmctl 195 545 - __SYSCALL(__NR_shmctl, sys_shmctl) 520 + __SC_COMP(__NR_shmctl, sys_shmctl, compat_sys_shmctl) 546 521 #define __NR_shmat 196 547 - __SYSCALL(__NR_shmat, sys_shmat) 522 + __SC_COMP(__NR_shmat, sys_shmat, compat_sys_shmat) 548 523 #define __NR_shmdt 197 549 524 __SYSCALL(__NR_shmdt, sys_shmdt) 550 525 ··· 568 543 #define __NR_sendto 206 569 544 __SYSCALL(__NR_sendto, sys_sendto) 570 545 #define __NR_recvfrom 207 571 - __SYSCALL(__NR_recvfrom, sys_recvfrom) 546 + __SC_COMP(__NR_recvfrom, sys_recvfrom, compat_sys_recvfrom) 572 547 #define __NR_setsockopt 208 573 - __SYSCALL(__NR_setsockopt, sys_setsockopt) 548 + __SC_COMP(__NR_setsockopt, sys_setsockopt, compat_sys_setsockopt) 574 549 #define __NR_getsockopt 209 575 - __SYSCALL(__NR_getsockopt, sys_getsockopt) 550 + __SC_COMP(__NR_getsockopt, sys_getsockopt, compat_sys_getsockopt) 576 551 #define __NR_shutdown 210 577 552 __SYSCALL(__NR_shutdown, sys_shutdown) 578 553 #define __NR_sendmsg 211 579 - __SYSCALL(__NR_sendmsg, sys_sendmsg) 554 + __SC_COMP(__NR_sendmsg, sys_sendmsg, compat_sys_sendmsg) 580 555 #define __NR_recvmsg 212 581 - __SYSCALL(__NR_recvmsg, sys_recvmsg) 556 + __SC_COMP(__NR_recvmsg, sys_recvmsg, compat_sys_recvmsg) 582 557 583 558 /* mm/filemap.c */ 584 559 #define __NR_readahead 213 585 - __SYSCALL(__NR_readahead, sys_readahead) 560 + __SC_COMP(__NR_readahead, sys_readahead, compat_sys_readahead) 586 561 587 562 /* mm/nommu.c, also with MMU */ 588 563 #define __NR_brk 214 ··· 598 573 #define __NR_request_key 218 599 574 __SYSCALL(__NR_request_key, sys_request_key) 600 575 #define __NR_keyctl 219 601 - __SYSCALL(__NR_keyctl, sys_keyctl) 576 + __SC_COMP(__NR_keyctl, sys_keyctl, compat_sys_keyctl) 602 577 603 578 /* arch/example/kernel/sys_example.c */ 604 579 #define __NR_clone 220 605 - __SYSCALL(__NR_clone, sys_clone) /* .long sys_clone_wrapper */ 580 + __SYSCALL(__NR_clone, sys_clone) 606 581 #define __NR_execve 221 607 - __SYSCALL(__NR_execve, sys_execve) /* .long sys_execve_wrapper */ 582 + __SC_COMP(__NR_execve, sys_execve, compat_sys_execve) 608 583 609 584 #define __NR3264_mmap 222 610 585 __SC_3264(__NR3264_mmap, sys_mmap2, sys_mmap) 611 586 /* mm/fadvise.c */ 612 587 #define __NR3264_fadvise64 223 613 - __SYSCALL(__NR3264_fadvise64, sys_fadvise64_64) 588 + __SC_COMP(__NR3264_fadvise64, sys_fadvise64_64, compat_sys_fadvise64_64) 614 589 615 590 /* mm/, CONFIG_MMU only */ 616 591 #ifndef __ARCH_NOMMU ··· 637 612 #define __NR_remap_file_pages 234 638 613 __SYSCALL(__NR_remap_file_pages, sys_remap_file_pages) 639 614 #define __NR_mbind 235 640 - __SYSCALL(__NR_mbind, sys_mbind) 615 + __SC_COMP(__NR_mbind, sys_mbind, compat_sys_mbind) 641 616 #define __NR_get_mempolicy 236 642 - __SYSCALL(__NR_get_mempolicy, sys_get_mempolicy) 617 + __SC_COMP(__NR_get_mempolicy, sys_get_mempolicy, compat_sys_get_mempolicy) 643 618 #define __NR_set_mempolicy 237 644 - __SYSCALL(__NR_set_mempolicy, sys_set_mempolicy) 619 + __SC_COMP(__NR_set_mempolicy, sys_set_mempolicy, compat_sys_set_mempolicy) 645 620 #define __NR_migrate_pages 238 646 - __SYSCALL(__NR_migrate_pages, sys_migrate_pages) 621 + __SC_COMP(__NR_migrate_pages, sys_migrate_pages, compat_sys_migrate_pages) 647 622 #define __NR_move_pages 239 648 - __SYSCALL(__NR_move_pages, sys_move_pages) 623 + __SC_COMP(__NR_move_pages, sys_move_pages, compat_sys_move_pages) 649 624 #endif 650 625 651 626 #define __NR_rt_tgsigqueueinfo 240 652 - __SYSCALL(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo) 627 + __SC_COMP(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo, \ 628 + compat_sys_rt_tgsigqueueinfo) 653 629 #define __NR_perf_event_open 241 654 630 __SYSCALL(__NR_perf_event_open, sys_perf_event_open) 655 631 #define __NR_accept4 242 656 632 __SYSCALL(__NR_accept4, sys_accept4) 657 633 #define __NR_recvmmsg 243 658 - __SYSCALL(__NR_recvmmsg, sys_recvmmsg) 634 + __SC_COMP(__NR_recvmmsg, sys_recvmmsg, compat_sys_recvmmsg) 659 635 660 636 /* 661 637 * Architectures may provide up to 16 syscalls of their own ··· 665 639 #define __NR_arch_specific_syscall 244 666 640 667 641 #define __NR_wait4 260 668 - __SYSCALL(__NR_wait4, sys_wait4) 642 + __SC_COMP(__NR_wait4, sys_wait4, compat_sys_wait4) 669 643 #define __NR_prlimit64 261 670 644 __SYSCALL(__NR_prlimit64, sys_prlimit64) 671 645 #define __NR_fanotify_init 262 672 646 __SYSCALL(__NR_fanotify_init, sys_fanotify_init) 673 647 #define __NR_fanotify_mark 263 674 648 __SYSCALL(__NR_fanotify_mark, sys_fanotify_mark) 675 - #define __NR_name_to_handle_at 264 649 + #define __NR_name_to_handle_at 264 676 650 __SYSCALL(__NR_name_to_handle_at, sys_name_to_handle_at) 677 - #define __NR_open_by_handle_at 265 678 - __SYSCALL(__NR_open_by_handle_at, sys_open_by_handle_at) 651 + #define __NR_open_by_handle_at 265 652 + __SC_COMP(__NR_open_by_handle_at, sys_open_by_handle_at, \ 653 + compat_sys_open_by_handle_at) 679 654 #define __NR_clock_adjtime 266 680 - __SYSCALL(__NR_clock_adjtime, sys_clock_adjtime) 655 + __SC_COMP(__NR_clock_adjtime, sys_clock_adjtime, compat_sys_clock_adjtime) 681 656 #define __NR_syncfs 267 682 657 __SYSCALL(__NR_syncfs, sys_syncfs) 683 658
+187
include/linux/compat.h
··· 12 12 #include <linux/sem.h> 13 13 #include <linux/socket.h> 14 14 #include <linux/if.h> 15 + #include <linux/fs.h> 15 16 16 17 #include <asm/compat.h> 17 18 #include <asm/siginfo.h> ··· 210 209 compat_uptr_t list_op_pending; 211 210 }; 212 211 212 + struct compat_statfs; 213 + struct compat_statfs64; 214 + struct compat_old_linux_dirent; 215 + struct compat_linux_dirent; 216 + struct linux_dirent64; 217 + struct compat_msghdr; 218 + struct compat_mmsghdr; 219 + struct compat_sysinfo; 220 + struct compat_sysctl_args; 221 + struct compat_kexec_segment; 222 + struct compat_mq_attr; 223 + 213 224 extern void compat_exit_robust_list(struct task_struct *curr); 214 225 215 226 asmlinkage long ··· 344 331 const compat_sigset_t __user *sigmask, 345 332 compat_size_t sigsetsize); 346 333 334 + asmlinkage long compat_sys_utime(const char __user *filename, 335 + struct compat_utimbuf __user *t); 347 336 asmlinkage long compat_sys_utimensat(unsigned int dfd, const char __user *filename, 348 337 struct compat_timespec __user *t, int flags); 349 338 339 + asmlinkage long compat_sys_time(compat_time_t __user *tloc); 340 + asmlinkage long compat_sys_stime(compat_time_t __user *tptr); 350 341 asmlinkage long compat_sys_signalfd(int ufd, 351 342 const compat_sigset_t __user *sigmask, 352 343 compat_size_t sigsetsize); ··· 367 350 int flags); 368 351 asmlinkage long compat_sys_futimesat(unsigned int dfd, const char __user *filename, 369 352 struct compat_timeval __user *t); 353 + asmlinkage long compat_sys_utimes(const char __user *filename, 354 + struct compat_timeval __user *t); 355 + asmlinkage long compat_sys_newstat(const char __user * filename, 356 + struct compat_stat __user *statbuf); 357 + asmlinkage long compat_sys_newlstat(const char __user * filename, 358 + struct compat_stat __user *statbuf); 370 359 asmlinkage long compat_sys_newfstatat(unsigned int dfd, const char __user * filename, 371 360 struct compat_stat __user *statbuf, 372 361 int flag); 362 + asmlinkage long compat_sys_newfstat(unsigned int fd, 363 + struct compat_stat __user * statbuf); 364 + asmlinkage long compat_sys_statfs(const char __user *pathname, 365 + struct compat_statfs __user *buf); 366 + asmlinkage long compat_sys_fstatfs(unsigned int fd, 367 + struct compat_statfs __user *buf); 368 + asmlinkage long compat_sys_statfs64(const char __user *pathname, 369 + compat_size_t sz, 370 + struct compat_statfs64 __user *buf); 371 + asmlinkage long compat_sys_fstatfs64(unsigned int fd, compat_size_t sz, 372 + struct compat_statfs64 __user *buf); 373 + asmlinkage long compat_sys_fcntl64(unsigned int fd, unsigned int cmd, 374 + unsigned long arg); 375 + asmlinkage long compat_sys_fcntl(unsigned int fd, unsigned int cmd, 376 + unsigned long arg); 377 + asmlinkage long compat_sys_io_setup(unsigned nr_reqs, u32 __user *ctx32p); 378 + asmlinkage long compat_sys_io_getevents(aio_context_t ctx_id, 379 + unsigned long min_nr, 380 + unsigned long nr, 381 + struct io_event __user *events, 382 + struct compat_timespec __user *timeout); 383 + asmlinkage long compat_sys_io_submit(aio_context_t ctx_id, int nr, 384 + u32 __user *iocb); 385 + asmlinkage long compat_sys_mount(const char __user * dev_name, 386 + const char __user * dir_name, 387 + const char __user * type, unsigned long flags, 388 + const void __user * data); 389 + asmlinkage long compat_sys_old_readdir(unsigned int fd, 390 + struct compat_old_linux_dirent __user *, 391 + unsigned int count); 392 + asmlinkage long compat_sys_getdents(unsigned int fd, 393 + struct compat_linux_dirent __user *dirent, 394 + unsigned int count); 395 + asmlinkage long compat_sys_getdents64(unsigned int fd, 396 + struct linux_dirent64 __user * dirent, 397 + unsigned int count); 398 + asmlinkage long compat_sys_vmsplice(int fd, const struct compat_iovec __user *, 399 + unsigned int nr_segs, unsigned int flags); 400 + asmlinkage long compat_sys_open(const char __user *filename, int flags, 401 + int mode); 373 402 asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename, 374 403 int flags, int mode); 404 + asmlinkage long compat_sys_open_by_handle_at(int mountdirfd, 405 + struct file_handle __user *handle, 406 + int flags); 407 + asmlinkage long compat_sys_pselect6(int n, compat_ulong_t __user *inp, 408 + compat_ulong_t __user *outp, 409 + compat_ulong_t __user *exp, 410 + struct compat_timespec __user *tsp, 411 + void __user *sig); 412 + asmlinkage long compat_sys_ppoll(struct pollfd __user *ufds, 413 + unsigned int nfds, 414 + struct compat_timespec __user *tsp, 415 + const compat_sigset_t __user *sigmask, 416 + compat_size_t sigsetsize); 417 + #if (defined(CONFIG_NFSD) || defined(CONFIG_NFSD_MODULE)) && !defined(CONFIG_NFSD_DEPRECATED) 418 + union compat_nfsctl_res; 419 + struct compat_nfsctl_arg; 420 + asmlinkage long compat_sys_nfsservctl(int cmd, 421 + struct compat_nfsctl_arg __user *arg, 422 + union compat_nfsctl_res __user *res); 423 + #else 424 + long asmlinkage compat_sys_nfsservctl(int cmd, void *notused, void *notused2); 425 + #endif 426 + asmlinkage long compat_sys_signalfd4(int ufd, 427 + const compat_sigset_t __user *sigmask, 428 + compat_size_t sigsetsize, int flags); 429 + asmlinkage long compat_sys_get_mempolicy(int __user *policy, 430 + compat_ulong_t __user *nmask, 431 + compat_ulong_t maxnode, 432 + compat_ulong_t addr, 433 + compat_ulong_t flags); 434 + asmlinkage long compat_sys_set_mempolicy(int mode, compat_ulong_t __user *nmask, 435 + compat_ulong_t maxnode); 436 + asmlinkage long compat_sys_mbind(compat_ulong_t start, compat_ulong_t len, 437 + compat_ulong_t mode, 438 + compat_ulong_t __user *nmask, 439 + compat_ulong_t maxnode, compat_ulong_t flags); 440 + 441 + asmlinkage long compat_sys_setsockopt(int fd, int level, int optname, 442 + char __user *optval, unsigned int optlen); 443 + asmlinkage long compat_sys_sendmsg(int fd, struct compat_msghdr __user *msg, 444 + unsigned flags); 445 + asmlinkage long compat_sys_recvmsg(int fd, struct compat_msghdr __user *msg, 446 + unsigned int flags); 447 + asmlinkage long compat_sys_recv(int fd, void __user *buf, size_t len, 448 + unsigned flags); 449 + asmlinkage long compat_sys_recvfrom(int fd, void __user *buf, size_t len, 450 + unsigned flags, struct sockaddr __user *addr, 451 + int __user *addrlen); 452 + asmlinkage long compat_sys_recvmmsg(int fd, struct compat_mmsghdr __user *mmsg, 453 + unsigned vlen, unsigned int flags, 454 + struct compat_timespec __user *timeout); 455 + asmlinkage long compat_sys_nanosleep(struct compat_timespec __user *rqtp, 456 + struct compat_timespec __user *rmtp); 457 + asmlinkage long compat_sys_getitimer(int which, 458 + struct compat_itimerval __user *it); 459 + asmlinkage long compat_sys_setitimer(int which, 460 + struct compat_itimerval __user *in, 461 + struct compat_itimerval __user *out); 462 + asmlinkage long compat_sys_times(struct compat_tms __user *tbuf); 463 + asmlinkage long compat_sys_setrlimit(unsigned int resource, 464 + struct compat_rlimit __user *rlim); 465 + asmlinkage long compat_sys_getrlimit (unsigned int resource, 466 + struct compat_rlimit __user *rlim); 467 + asmlinkage long compat_sys_getrusage(int who, struct compat_rusage __user *ru); 468 + asmlinkage long compat_sys_sched_setaffinity(compat_pid_t pid, 469 + unsigned int len, 470 + compat_ulong_t __user *user_mask_ptr); 471 + asmlinkage long compat_sys_sched_getaffinity(compat_pid_t pid, 472 + unsigned int len, 473 + compat_ulong_t __user *user_mask_ptr); 474 + asmlinkage long compat_sys_timer_create(clockid_t which_clock, 475 + struct compat_sigevent __user *timer_event_spec, 476 + timer_t __user *created_timer_id); 477 + asmlinkage long compat_sys_timer_settime(timer_t timer_id, int flags, 478 + struct compat_itimerspec __user *new, 479 + struct compat_itimerspec __user *old); 480 + asmlinkage long compat_sys_timer_gettime(timer_t timer_id, 481 + struct compat_itimerspec __user *setting); 482 + asmlinkage long compat_sys_clock_settime(clockid_t which_clock, 483 + struct compat_timespec __user *tp); 484 + asmlinkage long compat_sys_clock_gettime(clockid_t which_clock, 485 + struct compat_timespec __user *tp); 486 + asmlinkage long compat_sys_clock_adjtime(clockid_t which_clock, 487 + struct compat_timex __user *tp); 488 + asmlinkage long compat_sys_clock_getres(clockid_t which_clock, 489 + struct compat_timespec __user *tp); 490 + asmlinkage long compat_sys_clock_nanosleep(clockid_t which_clock, int flags, 491 + struct compat_timespec __user *rqtp, 492 + struct compat_timespec __user *rmtp); 493 + asmlinkage long compat_sys_rt_sigtimedwait (compat_sigset_t __user *uthese, 494 + struct compat_siginfo __user *uinfo, 495 + struct compat_timespec __user *uts, compat_size_t sigsetsize); 496 + asmlinkage long compat_sys_rt_sigsuspend(compat_sigset_t __user *unewset, 497 + compat_size_t sigsetsize); 498 + asmlinkage long compat_sys_sysinfo(struct compat_sysinfo __user *info); 499 + asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd, 500 + unsigned long arg); 501 + asmlinkage long compat_sys_futex(u32 __user *uaddr, int op, u32 val, 502 + struct compat_timespec __user *utime, u32 __user *uaddr2, 503 + u32 val3); 504 + asmlinkage long compat_sys_getsockopt(int fd, int level, int optname, 505 + char __user *optval, int __user *optlen); 506 + asmlinkage long compat_sys_kexec_load(unsigned long entry, 507 + unsigned long nr_segments, 508 + struct compat_kexec_segment __user *, 509 + unsigned long flags); 510 + asmlinkage long compat_sys_mq_getsetattr(mqd_t mqdes, 511 + const struct compat_mq_attr __user *u_mqstat, 512 + struct compat_mq_attr __user *u_omqstat); 513 + asmlinkage long compat_sys_mq_notify(mqd_t mqdes, 514 + const struct compat_sigevent __user *u_notification); 515 + asmlinkage long compat_sys_mq_open(const char __user *u_name, 516 + int oflag, compat_mode_t mode, 517 + struct compat_mq_attr __user *u_attr); 518 + asmlinkage long compat_sys_mq_timedsend(mqd_t mqdes, 519 + const char __user *u_msg_ptr, 520 + size_t msg_len, unsigned int msg_prio, 521 + const struct compat_timespec __user *u_abs_timeout); 522 + asmlinkage ssize_t compat_sys_mq_timedreceive(mqd_t mqdes, 523 + char __user *u_msg_ptr, 524 + size_t msg_len, unsigned int __user *u_msg_prio, 525 + const struct compat_timespec __user *u_abs_timeout); 526 + asmlinkage long compat_sys_socketcall(int call, u32 __user *args); 527 + asmlinkage long compat_sys_sysctl(struct compat_sysctl_args __user *args); 375 528 376 529 extern ssize_t compat_rw_copy_check_uvector(int type, 377 530 const struct compat_iovec __user *uvector, unsigned long nr_segs,
+8
kernel/compat.c
··· 293 293 return compat_jiffies_to_clock_t(jiffies); 294 294 } 295 295 296 + #ifdef __ARCH_WANT_SYS_SIGPENDING 297 + 296 298 /* 297 299 * Assumption: old_sigset_t and compat_old_sigset_t are both 298 300 * types that can be passed to put_user()/get_user(). ··· 313 311 ret = put_user(s, set); 314 312 return ret; 315 313 } 314 + 315 + #endif 316 + 317 + #ifdef __ARCH_WANT_SYS_SIGPROCMASK 316 318 317 319 asmlinkage long compat_sys_sigprocmask(int how, compat_old_sigset_t __user *set, 318 320 compat_old_sigset_t __user *oset) ··· 338 332 ret = put_user(s, oset); 339 333 return ret; 340 334 } 335 + 336 + #endif 341 337 342 338 asmlinkage long compat_sys_setrlimit(unsigned int resource, 343 339 struct compat_rlimit __user *rlim)