diff options
Diffstat (limited to 'include/linux/compat.h')
-rw-r--r-- | include/linux/compat.h | 50 |
1 files changed, 44 insertions, 6 deletions
diff --git a/include/linux/compat.h b/include/linux/compat.h index dec7e2d18875..de095b0462a7 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; |
@@ -367,6 +388,11 @@ int get_compat_sigevent(struct sigevent *event, | |||
367 | const struct compat_sigevent __user *u_event); | 388 | const struct compat_sigevent __user *u_event); |
368 | long compat_sys_rt_tgsigqueueinfo(compat_pid_t tgid, compat_pid_t pid, int sig, | 389 | long compat_sys_rt_tgsigqueueinfo(compat_pid_t tgid, compat_pid_t pid, int sig, |
369 | struct compat_siginfo __user *uinfo); | 390 | struct compat_siginfo __user *uinfo); |
391 | #ifdef CONFIG_COMPAT_OLD_SIGACTION | ||
392 | asmlinkage long compat_sys_sigaction(int sig, | ||
393 | const struct compat_old_sigaction __user *act, | ||
394 | struct compat_old_sigaction __user *oact); | ||
395 | #endif | ||
370 | 396 | ||
371 | static inline int compat_timeval_compare(struct compat_timeval *lhs, | 397 | static inline int compat_timeval_compare(struct compat_timeval *lhs, |
372 | struct compat_timeval *rhs) | 398 | struct compat_timeval *rhs) |
@@ -401,7 +427,8 @@ asmlinkage long compat_sys_settimeofday(struct compat_timeval __user *tv, | |||
401 | asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp); | 427 | asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp); |
402 | 428 | ||
403 | extern int compat_printk(const char *fmt, ...); | 429 | extern int compat_printk(const char *fmt, ...); |
404 | extern void sigset_from_compat(sigset_t *set, compat_sigset_t *compat); | 430 | extern void sigset_from_compat(sigset_t *set, const compat_sigset_t *compat); |
431 | extern void sigset_to_compat(compat_sigset_t *compat, const sigset_t *set); | ||
405 | 432 | ||
406 | asmlinkage long compat_sys_migrate_pages(compat_pid_t pid, | 433 | asmlinkage long compat_sys_migrate_pages(compat_pid_t pid, |
407 | compat_ulong_t maxnode, const compat_ulong_t __user *old_nodes, | 434 | compat_ulong_t maxnode, const compat_ulong_t __user *old_nodes, |
@@ -503,7 +530,7 @@ asmlinkage long compat_sys_vmsplice(int fd, const struct compat_iovec __user *, | |||
503 | unsigned int nr_segs, unsigned int flags); | 530 | unsigned int nr_segs, unsigned int flags); |
504 | asmlinkage long compat_sys_open(const char __user *filename, int flags, | 531 | asmlinkage long compat_sys_open(const char __user *filename, int flags, |
505 | umode_t mode); | 532 | umode_t mode); |
506 | asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename, | 533 | asmlinkage long compat_sys_openat(int dfd, const char __user *filename, |
507 | int flags, umode_t mode); | 534 | int flags, umode_t mode); |
508 | asmlinkage long compat_sys_open_by_handle_at(int mountdirfd, | 535 | asmlinkage long compat_sys_open_by_handle_at(int mountdirfd, |
509 | struct file_handle __user *handle, | 536 | struct file_handle __user *handle, |
@@ -592,6 +619,19 @@ asmlinkage long compat_sys_rt_sigtimedwait(compat_sigset_t __user *uthese, | |||
592 | struct compat_timespec __user *uts, compat_size_t sigsetsize); | 619 | struct compat_timespec __user *uts, compat_size_t sigsetsize); |
593 | asmlinkage long compat_sys_rt_sigsuspend(compat_sigset_t __user *unewset, | 620 | asmlinkage long compat_sys_rt_sigsuspend(compat_sigset_t __user *unewset, |
594 | compat_size_t sigsetsize); | 621 | compat_size_t sigsetsize); |
622 | asmlinkage long compat_sys_rt_sigprocmask(int how, compat_sigset_t __user *set, | ||
623 | compat_sigset_t __user *oset, | ||
624 | compat_size_t sigsetsize); | ||
625 | asmlinkage long compat_sys_rt_sigpending(compat_sigset_t __user *uset, | ||
626 | compat_size_t sigsetsize); | ||
627 | #ifndef CONFIG_ODD_RT_SIGACTION | ||
628 | asmlinkage long compat_sys_rt_sigaction(int, | ||
629 | const struct compat_sigaction __user *, | ||
630 | struct compat_sigaction __user *, | ||
631 | compat_size_t); | ||
632 | #endif | ||
633 | asmlinkage long compat_sys_rt_sigqueueinfo(compat_pid_t pid, int sig, | ||
634 | struct compat_siginfo __user *uinfo); | ||
595 | asmlinkage long compat_sys_sysinfo(struct compat_sysinfo __user *info); | 635 | asmlinkage long compat_sys_sysinfo(struct compat_sysinfo __user *info); |
596 | asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd, | 636 | asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd, |
597 | unsigned long arg); | 637 | unsigned long arg); |
@@ -642,13 +682,11 @@ asmlinkage ssize_t compat_sys_process_vm_writev(compat_pid_t pid, | |||
642 | 682 | ||
643 | asmlinkage long compat_sys_sendfile(int out_fd, int in_fd, | 683 | asmlinkage long compat_sys_sendfile(int out_fd, int in_fd, |
644 | compat_off_t __user *offset, compat_size_t count); | 684 | 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, | 685 | asmlinkage long compat_sys_sigaltstack(const compat_stack_t __user *uss_ptr, |
647 | compat_stack_t __user *uoss_ptr); | 686 | compat_stack_t __user *uoss_ptr); |
648 | 687 | ||
649 | int compat_restore_altstack(const compat_stack_t __user *uss); | 688 | int compat_restore_altstack(const compat_stack_t __user *uss); |
650 | int __compat_save_altstack(compat_stack_t __user *, unsigned long); | 689 | int __compat_save_altstack(compat_stack_t __user *, unsigned long); |
651 | #endif | ||
652 | 690 | ||
653 | asmlinkage long compat_sys_sched_rr_get_interval(compat_pid_t pid, | 691 | asmlinkage long compat_sys_sched_rr_get_interval(compat_pid_t pid, |
654 | struct compat_timespec __user *interval); | 692 | struct compat_timespec __user *interval); |