diff options
Diffstat (limited to 'include/linux/compat.h')
-rw-r--r-- | include/linux/compat.h | 53 |
1 files changed, 47 insertions, 6 deletions
diff --git a/include/linux/compat.h b/include/linux/compat.h index dec7e2d18875..76a87fb57ac2 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h | |||
@@ -68,7 +68,6 @@ | |||
68 | #ifndef compat_user_stack_pointer | 68 | #ifndef compat_user_stack_pointer |
69 | #define compat_user_stack_pointer() current_user_stack_pointer() | 69 | #define compat_user_stack_pointer() current_user_stack_pointer() |
70 | #endif | 70 | #endif |
71 | #ifdef CONFIG_GENERIC_SIGALTSTACK | ||
72 | #ifndef compat_sigaltstack /* we'll need that for MIPS */ | 71 | #ifndef compat_sigaltstack /* we'll need that for MIPS */ |
73 | typedef struct compat_sigaltstack { | 72 | typedef struct compat_sigaltstack { |
74 | compat_uptr_t ss_sp; | 73 | compat_uptr_t ss_sp; |
@@ -76,7 +75,6 @@ typedef struct compat_sigaltstack { | |||
76 | compat_size_t ss_size; | 75 | compat_size_t ss_size; |
77 | } compat_stack_t; | 76 | } compat_stack_t; |
78 | #endif | 77 | #endif |
79 | #endif | ||
80 | 78 | ||
81 | #define compat_jiffies_to_clock_t(x) \ | 79 | #define compat_jiffies_to_clock_t(x) \ |
82 | (((unsigned long)(x) * COMPAT_USER_HZ) / HZ) | 80 | (((unsigned long)(x) * COMPAT_USER_HZ) / HZ) |
@@ -142,6 +140,20 @@ typedef struct { | |||
142 | compat_sigset_word sig[_COMPAT_NSIG_WORDS]; | 140 | compat_sigset_word sig[_COMPAT_NSIG_WORDS]; |
143 | } compat_sigset_t; | 141 | } compat_sigset_t; |
144 | 142 | ||
143 | struct compat_sigaction { | ||
144 | #ifndef __ARCH_HAS_ODD_SIGACTION | ||
145 | compat_uptr_t sa_handler; | ||
146 | compat_ulong_t sa_flags; | ||
147 | #else | ||
148 | compat_ulong_t sa_flags; | ||
149 | compat_uptr_t sa_handler; | ||
150 | #endif | ||
151 | #ifdef __ARCH_HAS_SA_RESTORER | ||
152 | compat_uptr_t sa_restorer; | ||
153 | #endif | ||
154 | compat_sigset_t sa_mask __packed; | ||
155 | }; | ||
156 | |||
145 | /* | 157 | /* |
146 | * These functions operate strictly on struct compat_time* | 158 | * These functions operate strictly on struct compat_time* |
147 | */ | 159 | */ |
@@ -283,6 +295,15 @@ struct compat_robust_list_head { | |||
283 | compat_uptr_t list_op_pending; | 295 | compat_uptr_t list_op_pending; |
284 | }; | 296 | }; |
285 | 297 | ||
298 | #ifdef CONFIG_COMPAT_OLD_SIGACTION | ||
299 | struct compat_old_sigaction { | ||
300 | compat_uptr_t sa_handler; | ||
301 | compat_old_sigset_t sa_mask; | ||
302 | compat_ulong_t sa_flags; | ||
303 | compat_uptr_t sa_restorer; | ||
304 | }; | ||
305 | #endif | ||
306 | |||
286 | struct compat_statfs; | 307 | struct compat_statfs; |
287 | struct compat_statfs64; | 308 | struct compat_statfs64; |
288 | struct compat_old_linux_dirent; | 309 | struct compat_old_linux_dirent; |
@@ -338,6 +359,7 @@ asmlinkage ssize_t compat_sys_preadv(unsigned long fd, | |||
338 | asmlinkage ssize_t compat_sys_pwritev(unsigned long fd, | 359 | asmlinkage ssize_t compat_sys_pwritev(unsigned long fd, |
339 | const struct compat_iovec __user *vec, | 360 | const struct compat_iovec __user *vec, |
340 | unsigned long vlen, u32 pos_low, u32 pos_high); | 361 | unsigned long vlen, u32 pos_low, u32 pos_high); |
362 | asmlinkage long comat_sys_lseek(unsigned int, compat_off_t, unsigned int); | ||
341 | 363 | ||
342 | asmlinkage long compat_sys_execve(const char __user *filename, const compat_uptr_t __user *argv, | 364 | asmlinkage long compat_sys_execve(const char __user *filename, const compat_uptr_t __user *argv, |
343 | const compat_uptr_t __user *envp); | 365 | const compat_uptr_t __user *envp); |
@@ -367,6 +389,11 @@ int get_compat_sigevent(struct sigevent *event, | |||
367 | const struct compat_sigevent __user *u_event); | 389 | const struct compat_sigevent __user *u_event); |
368 | long compat_sys_rt_tgsigqueueinfo(compat_pid_t tgid, compat_pid_t pid, int sig, | 390 | long compat_sys_rt_tgsigqueueinfo(compat_pid_t tgid, compat_pid_t pid, int sig, |
369 | struct compat_siginfo __user *uinfo); | 391 | struct compat_siginfo __user *uinfo); |
392 | #ifdef CONFIG_COMPAT_OLD_SIGACTION | ||
393 | asmlinkage long compat_sys_sigaction(int sig, | ||
394 | const struct compat_old_sigaction __user *act, | ||
395 | struct compat_old_sigaction __user *oact); | ||
396 | #endif | ||
370 | 397 | ||
371 | static inline int compat_timeval_compare(struct compat_timeval *lhs, | 398 | static inline int compat_timeval_compare(struct compat_timeval *lhs, |
372 | struct compat_timeval *rhs) | 399 | struct compat_timeval *rhs) |
@@ -401,7 +428,8 @@ asmlinkage long compat_sys_settimeofday(struct compat_timeval __user *tv, | |||
401 | asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp); | 428 | asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp); |
402 | 429 | ||
403 | extern int compat_printk(const char *fmt, ...); | 430 | extern int compat_printk(const char *fmt, ...); |
404 | extern void sigset_from_compat(sigset_t *set, compat_sigset_t *compat); | 431 | extern void sigset_from_compat(sigset_t *set, const compat_sigset_t *compat); |
432 | extern void sigset_to_compat(compat_sigset_t *compat, const sigset_t *set); | ||
405 | 433 | ||
406 | asmlinkage long compat_sys_migrate_pages(compat_pid_t pid, | 434 | asmlinkage long compat_sys_migrate_pages(compat_pid_t pid, |
407 | compat_ulong_t maxnode, const compat_ulong_t __user *old_nodes, | 435 | compat_ulong_t maxnode, const compat_ulong_t __user *old_nodes, |
@@ -503,11 +531,13 @@ asmlinkage long compat_sys_vmsplice(int fd, const struct compat_iovec __user *, | |||
503 | unsigned int nr_segs, unsigned int flags); | 531 | unsigned int nr_segs, unsigned int flags); |
504 | asmlinkage long compat_sys_open(const char __user *filename, int flags, | 532 | asmlinkage long compat_sys_open(const char __user *filename, int flags, |
505 | umode_t mode); | 533 | umode_t mode); |
506 | asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename, | 534 | asmlinkage long compat_sys_openat(int dfd, const char __user *filename, |
507 | int flags, umode_t mode); | 535 | int flags, umode_t mode); |
508 | asmlinkage long compat_sys_open_by_handle_at(int mountdirfd, | 536 | asmlinkage long compat_sys_open_by_handle_at(int mountdirfd, |
509 | struct file_handle __user *handle, | 537 | struct file_handle __user *handle, |
510 | int flags); | 538 | int flags); |
539 | asmlinkage long compat_sys_truncate(const char __user *, compat_off_t); | ||
540 | asmlinkage long compat_sys_ftruncate(unsigned int, compat_ulong_t); | ||
511 | asmlinkage long compat_sys_pselect6(int n, compat_ulong_t __user *inp, | 541 | asmlinkage long compat_sys_pselect6(int n, compat_ulong_t __user *inp, |
512 | compat_ulong_t __user *outp, | 542 | compat_ulong_t __user *outp, |
513 | compat_ulong_t __user *exp, | 543 | compat_ulong_t __user *exp, |
@@ -592,6 +622,19 @@ asmlinkage long compat_sys_rt_sigtimedwait(compat_sigset_t __user *uthese, | |||
592 | struct compat_timespec __user *uts, compat_size_t sigsetsize); | 622 | struct compat_timespec __user *uts, compat_size_t sigsetsize); |
593 | asmlinkage long compat_sys_rt_sigsuspend(compat_sigset_t __user *unewset, | 623 | asmlinkage long compat_sys_rt_sigsuspend(compat_sigset_t __user *unewset, |
594 | compat_size_t sigsetsize); | 624 | compat_size_t sigsetsize); |
625 | asmlinkage long compat_sys_rt_sigprocmask(int how, compat_sigset_t __user *set, | ||
626 | compat_sigset_t __user *oset, | ||
627 | compat_size_t sigsetsize); | ||
628 | asmlinkage long compat_sys_rt_sigpending(compat_sigset_t __user *uset, | ||
629 | compat_size_t sigsetsize); | ||
630 | #ifndef CONFIG_ODD_RT_SIGACTION | ||
631 | asmlinkage long compat_sys_rt_sigaction(int, | ||
632 | const struct compat_sigaction __user *, | ||
633 | struct compat_sigaction __user *, | ||
634 | compat_size_t); | ||
635 | #endif | ||
636 | asmlinkage long compat_sys_rt_sigqueueinfo(compat_pid_t pid, int sig, | ||
637 | struct compat_siginfo __user *uinfo); | ||
595 | asmlinkage long compat_sys_sysinfo(struct compat_sysinfo __user *info); | 638 | asmlinkage long compat_sys_sysinfo(struct compat_sysinfo __user *info); |
596 | asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd, | 639 | asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd, |
597 | unsigned long arg); | 640 | unsigned long arg); |
@@ -642,13 +685,11 @@ asmlinkage ssize_t compat_sys_process_vm_writev(compat_pid_t pid, | |||
642 | 685 | ||
643 | asmlinkage long compat_sys_sendfile(int out_fd, int in_fd, | 686 | asmlinkage long compat_sys_sendfile(int out_fd, int in_fd, |
644 | compat_off_t __user *offset, compat_size_t count); | 687 | compat_off_t __user *offset, compat_size_t count); |
645 | #ifdef CONFIG_GENERIC_SIGALTSTACK | ||
646 | asmlinkage long compat_sys_sigaltstack(const compat_stack_t __user *uss_ptr, | 688 | asmlinkage long compat_sys_sigaltstack(const compat_stack_t __user *uss_ptr, |
647 | compat_stack_t __user *uoss_ptr); | 689 | compat_stack_t __user *uoss_ptr); |
648 | 690 | ||
649 | int compat_restore_altstack(const compat_stack_t __user *uss); | 691 | int compat_restore_altstack(const compat_stack_t __user *uss); |
650 | int __compat_save_altstack(compat_stack_t __user *, unsigned long); | 692 | int __compat_save_altstack(compat_stack_t __user *, unsigned long); |
651 | #endif | ||
652 | 693 | ||
653 | asmlinkage long compat_sys_sched_rr_get_interval(compat_pid_t pid, | 694 | asmlinkage long compat_sys_sched_rr_get_interval(compat_pid_t pid, |
654 | struct compat_timespec __user *interval); | 695 | struct compat_timespec __user *interval); |