aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/compat.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/compat.h')
-rw-r--r--include/linux/compat.h53
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 */
73typedef struct compat_sigaltstack { 72typedef 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
143struct 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
299struct 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
286struct compat_statfs; 307struct compat_statfs;
287struct compat_statfs64; 308struct compat_statfs64;
288struct compat_old_linux_dirent; 309struct compat_old_linux_dirent;
@@ -338,6 +359,7 @@ asmlinkage ssize_t compat_sys_preadv(unsigned long fd,
338asmlinkage ssize_t compat_sys_pwritev(unsigned long fd, 359asmlinkage 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);
362asmlinkage long comat_sys_lseek(unsigned int, compat_off_t, unsigned int);
341 363
342asmlinkage long compat_sys_execve(const char __user *filename, const compat_uptr_t __user *argv, 364asmlinkage 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);
368long compat_sys_rt_tgsigqueueinfo(compat_pid_t tgid, compat_pid_t pid, int sig, 390long 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
393asmlinkage 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
371static inline int compat_timeval_compare(struct compat_timeval *lhs, 398static 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,
401asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp); 428asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp);
402 429
403extern int compat_printk(const char *fmt, ...); 430extern int compat_printk(const char *fmt, ...);
404extern void sigset_from_compat(sigset_t *set, compat_sigset_t *compat); 431extern void sigset_from_compat(sigset_t *set, const compat_sigset_t *compat);
432extern void sigset_to_compat(compat_sigset_t *compat, const sigset_t *set);
405 433
406asmlinkage long compat_sys_migrate_pages(compat_pid_t pid, 434asmlinkage 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);
504asmlinkage long compat_sys_open(const char __user *filename, int flags, 532asmlinkage long compat_sys_open(const char __user *filename, int flags,
505 umode_t mode); 533 umode_t mode);
506asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename, 534asmlinkage long compat_sys_openat(int dfd, const char __user *filename,
507 int flags, umode_t mode); 535 int flags, umode_t mode);
508asmlinkage long compat_sys_open_by_handle_at(int mountdirfd, 536asmlinkage 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);
539asmlinkage long compat_sys_truncate(const char __user *, compat_off_t);
540asmlinkage long compat_sys_ftruncate(unsigned int, compat_ulong_t);
511asmlinkage long compat_sys_pselect6(int n, compat_ulong_t __user *inp, 541asmlinkage 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);
593asmlinkage long compat_sys_rt_sigsuspend(compat_sigset_t __user *unewset, 623asmlinkage long compat_sys_rt_sigsuspend(compat_sigset_t __user *unewset,
594 compat_size_t sigsetsize); 624 compat_size_t sigsetsize);
625asmlinkage long compat_sys_rt_sigprocmask(int how, compat_sigset_t __user *set,
626 compat_sigset_t __user *oset,
627 compat_size_t sigsetsize);
628asmlinkage long compat_sys_rt_sigpending(compat_sigset_t __user *uset,
629 compat_size_t sigsetsize);
630#ifndef CONFIG_ODD_RT_SIGACTION
631asmlinkage long compat_sys_rt_sigaction(int,
632 const struct compat_sigaction __user *,
633 struct compat_sigaction __user *,
634 compat_size_t);
635#endif
636asmlinkage long compat_sys_rt_sigqueueinfo(compat_pid_t pid, int sig,
637 struct compat_siginfo __user *uinfo);
595asmlinkage long compat_sys_sysinfo(struct compat_sysinfo __user *info); 638asmlinkage long compat_sys_sysinfo(struct compat_sysinfo __user *info);
596asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd, 639asmlinkage 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
643asmlinkage long compat_sys_sendfile(int out_fd, int in_fd, 686asmlinkage 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
646asmlinkage long compat_sys_sigaltstack(const compat_stack_t __user *uss_ptr, 688asmlinkage 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
649int compat_restore_altstack(const compat_stack_t __user *uss); 691int compat_restore_altstack(const compat_stack_t __user *uss);
650int __compat_save_altstack(compat_stack_t __user *, unsigned long); 692int __compat_save_altstack(compat_stack_t __user *, unsigned long);
651#endif
652 693
653asmlinkage long compat_sys_sched_rr_get_interval(compat_pid_t pid, 694asmlinkage long compat_sys_sched_rr_get_interval(compat_pid_t pid,
654 struct compat_timespec __user *interval); 695 struct compat_timespec __user *interval);