2014-02-27 09:52:01 +01:00
# include <linux/syscalls.h>
# include <linux/compat.h>
2014-02-27 15:16:04 +01:00
# include "entry.h"
2014-02-27 09:52:01 +01:00
# define COMPAT_SYSCALL_WRAP1(name, ...) \
COMPAT_SYSCALL_WRAPx ( 1 , _ # # name , __VA_ARGS__ )
# define COMPAT_SYSCALL_WRAP2(name, ...) \
COMPAT_SYSCALL_WRAPx ( 2 , _ # # name , __VA_ARGS__ )
# define COMPAT_SYSCALL_WRAP3(name, ...) \
COMPAT_SYSCALL_WRAPx ( 3 , _ # # name , __VA_ARGS__ )
# define COMPAT_SYSCALL_WRAP4(name, ...) \
COMPAT_SYSCALL_WRAPx ( 4 , _ # # name , __VA_ARGS__ )
# define COMPAT_SYSCALL_WRAP5(name, ...) \
COMPAT_SYSCALL_WRAPx ( 5 , _ # # name , __VA_ARGS__ )
# define COMPAT_SYSCALL_WRAP6(name, ...) \
COMPAT_SYSCALL_WRAPx ( 6 , _ # # name , __VA_ARGS__ )
# define COMPAT_SYSCALL_WRAPx(x, name, ...) \
asmlinkage long compat_sys # # name ( __MAP ( x , __SC_LONG , __VA_ARGS__ ) ) ; \
asmlinkage long compat_sys # # name ( __MAP ( x , __SC_LONG , __VA_ARGS__ ) ) \
{ \
return sys # # name ( __MAP ( x , __SC_DELOUSE , __VA_ARGS__ ) ) ; \
}
COMPAT_SYSCALL_WRAP1 ( exit , int , error_code ) ;
COMPAT_SYSCALL_WRAP1 ( close , unsigned int , fd ) ;
COMPAT_SYSCALL_WRAP2 ( creat , const char __user * , pathname , umode_t , mode ) ;
COMPAT_SYSCALL_WRAP2 ( link , const char __user * , oldname , const char __user * , newname ) ;
COMPAT_SYSCALL_WRAP1 ( unlink , const char __user * , pathname ) ;
COMPAT_SYSCALL_WRAP1 ( chdir , const char __user * , filename ) ;
COMPAT_SYSCALL_WRAP3 ( mknod , const char __user * , filename , umode_t , mode , unsigned , dev ) ;
COMPAT_SYSCALL_WRAP2 ( chmod , const char __user * , filename , umode_t , mode ) ;
COMPAT_SYSCALL_WRAP1 ( oldumount , char __user * , name ) ;
COMPAT_SYSCALL_WRAP1 ( alarm , unsigned int , seconds ) ;
COMPAT_SYSCALL_WRAP2 ( access , const char __user * , filename , int , mode ) ;
COMPAT_SYSCALL_WRAP1 ( nice , int , increment ) ;
2014-02-27 13:42:10 +01:00
COMPAT_SYSCALL_WRAP2 ( kill , int , pid , int , sig ) ;
COMPAT_SYSCALL_WRAP2 ( rename , const char __user * , oldname , const char __user * , newname ) ;
COMPAT_SYSCALL_WRAP2 ( mkdir , const char __user * , pathname , umode_t , mode ) ;
COMPAT_SYSCALL_WRAP1 ( rmdir , const char __user * , pathname ) ;
COMPAT_SYSCALL_WRAP1 ( dup , unsigned int , fildes ) ;
COMPAT_SYSCALL_WRAP1 ( pipe , int __user * , fildes ) ;
COMPAT_SYSCALL_WRAP1 ( brk , compat_ulong_t , brk ) ;
COMPAT_SYSCALL_WRAP2 ( signal , int , sig , __sighandler_t , handler ) ;
COMPAT_SYSCALL_WRAP1 ( acct , const char __user * , name ) ;
COMPAT_SYSCALL_WRAP2 ( umount , char __user * , name , int , flags ) ;
2014-02-27 14:04:43 +01:00
COMPAT_SYSCALL_WRAP2 ( setpgid , compat_pid_t , pid , compat_pid_t , pgid ) ;
COMPAT_SYSCALL_WRAP1 ( umask , int , mask ) ;
COMPAT_SYSCALL_WRAP1 ( chroot , const char __user * , filename ) ;
COMPAT_SYSCALL_WRAP2 ( dup2 , unsigned int , oldfd , unsigned int , newfd ) ;
COMPAT_SYSCALL_WRAP3 ( sigsuspend , int , unused1 , int , unused2 , compat_old_sigset_t , mask ) ;
COMPAT_SYSCALL_WRAP2 ( sethostname , char __user * , name , int , len ) ;
COMPAT_SYSCALL_WRAP2 ( symlink , const char __user * , old , const char __user * , new ) ;
COMPAT_SYSCALL_WRAP3 ( readlink , const char __user * , path , char __user * , buf , int , bufsiz ) ;
COMPAT_SYSCALL_WRAP1 ( uselib , const char __user * , library ) ;
COMPAT_SYSCALL_WRAP2 ( swapon , const char __user * , specialfile , int , swap_flags ) ;
2014-02-27 14:20:53 +01:00
COMPAT_SYSCALL_WRAP4 ( reboot , int , magic1 , int , magic2 , unsigned int , cmd , void __user * , arg ) ;
COMPAT_SYSCALL_WRAP2 ( munmap , compat_ulong_t , addr , compat_size_t , len ) ;
COMPAT_SYSCALL_WRAP2 ( fchmod , unsigned int , fd , umode_t , mode ) ;
COMPAT_SYSCALL_WRAP2 ( getpriority , int , which , int , who ) ;
COMPAT_SYSCALL_WRAP3 ( setpriority , int , which , int , who , int , niceval ) ;
COMPAT_SYSCALL_WRAP3 ( syslog , int , type , char __user * , buf , int , len ) ;
COMPAT_SYSCALL_WRAP1 ( swapoff , const char __user * , specialfile ) ;
COMPAT_SYSCALL_WRAP1 ( fsync , unsigned int , fd ) ;
COMPAT_SYSCALL_WRAP2 ( setdomainname , char __user * , name , int , len ) ;
COMPAT_SYSCALL_WRAP1 ( newuname , struct new_utsname __user * , name ) ;
2014-02-27 15:16:04 +01:00
COMPAT_SYSCALL_WRAP3 ( mprotect , compat_ulong_t , start , compat_size_t , len , compat_ulong_t , prot ) ;
COMPAT_SYSCALL_WRAP3 ( init_module , void __user * , umod , compat_ulong_t , len , const char __user * , uargs ) ;
COMPAT_SYSCALL_WRAP2 ( delete_module , const char __user * , name_user , unsigned int , flags ) ;
COMPAT_SYSCALL_WRAP4 ( quotactl , unsigned int , cmd , const char __user * , special , qid_t , id , void __user * , addr ) ;
COMPAT_SYSCALL_WRAP1 ( getpgid , compat_pid_t , pid ) ;
COMPAT_SYSCALL_WRAP1 ( fchdir , unsigned int , fd ) ;
COMPAT_SYSCALL_WRAP2 ( bdflush , int , func , compat_long_t , data ) ;
COMPAT_SYSCALL_WRAP3 ( sysfs , int , option , compat_ulong_t , arg1 , compat_ulong_t , arg2 ) ;
COMPAT_SYSCALL_WRAP1 ( s390_personality , unsigned int , personality ) ;
COMPAT_SYSCALL_WRAP5 ( llseek , unsigned int , fd , u32 , high , u32 , low , loff_t __user * , result , unsigned int , whence ) ;
2014-02-27 15:33:06 +01:00
COMPAT_SYSCALL_WRAP2 ( flock , unsigned int , fd , unsigned int , cmd ) ;
COMPAT_SYSCALL_WRAP3 ( msync , compat_ulong_t , start , compat_size_t , len , int , flags ) ;
COMPAT_SYSCALL_WRAP1 ( getsid , compat_pid_t , pid ) ;
COMPAT_SYSCALL_WRAP1 ( fdatasync , unsigned int , fd ) ;
COMPAT_SYSCALL_WRAP2 ( mlock , compat_ulong_t , start , compat_size_t , len ) ;
COMPAT_SYSCALL_WRAP2 ( munlock , compat_ulong_t , start , compat_size_t , len ) ;
COMPAT_SYSCALL_WRAP1 ( mlockall , int , flags ) ;
COMPAT_SYSCALL_WRAP2 ( sched_setparam , compat_pid_t , pid , struct sched_param __user * , param ) ;
COMPAT_SYSCALL_WRAP2 ( sched_getparam , compat_pid_t , pid , struct sched_param __user * , param ) ;
COMPAT_SYSCALL_WRAP3 ( sched_setscheduler , compat_pid_t , pid , int , policy , struct sched_param __user * , param ) ;
2014-02-27 16:49:10 +01:00
COMPAT_SYSCALL_WRAP1 ( sched_getscheduler , compat_pid_t , pid ) ;
COMPAT_SYSCALL_WRAP1 ( sched_get_priority_max , int , policy ) ;
COMPAT_SYSCALL_WRAP1 ( sched_get_priority_min , int , policy ) ;
COMPAT_SYSCALL_WRAP5 ( mremap , u32 , addr , u32 , old_len , u32 , new_len , u32 , flags , u32 , new_addr ) ;
COMPAT_SYSCALL_WRAP3 ( poll , struct pollfd __user * , ufds , unsigned int , nfds , int , timeout ) ;
COMPAT_SYSCALL_WRAP5 ( prctl , int , option , u32 , arg2 , u32 , arg3 , u32 , arg4 , u32 , arg5 ) ;
COMPAT_SYSCALL_WRAP2 ( getcwd , char __user * , buf , u32 , size ) ;
COMPAT_SYSCALL_WRAP2 ( capget , cap_user_header_t , header , cap_user_data_t , dataptr ) ;
COMPAT_SYSCALL_WRAP2 ( capset , cap_user_header_t , header , const cap_user_data_t , data ) ;
COMPAT_SYSCALL_WRAP3 ( lchown , const char __user * , filename , compat_uid_t , user , compat_gid_t , group ) ;
2014-02-27 17:35:23 +01:00
COMPAT_SYSCALL_WRAP2 ( setreuid , compat_uid_t , ruid , compat_uid_t , euid ) ;
COMPAT_SYSCALL_WRAP2 ( setregid , compat_gid_t , rgid , compat_gid_t , egid ) ;
COMPAT_SYSCALL_WRAP2 ( getgroups , int , gidsetsize , compat_gid_t __user * , grouplist ) ;
COMPAT_SYSCALL_WRAP2 ( setgroups , int , gidsetsize , compat_gid_t __user * , grouplist ) ;
COMPAT_SYSCALL_WRAP3 ( fchown , unsigned int , fd , compat_uid_t , user , compat_gid_t , group ) ;
COMPAT_SYSCALL_WRAP3 ( setresuid , compat_uid_t , ruid , compat_uid_t , euid , compat_uid_t , suid ) ;
COMPAT_SYSCALL_WRAP3 ( getresuid , compat_uid_t __user * , ruid , compat_uid_t __user * , euid , compat_uid_t __user * , suid ) ;
COMPAT_SYSCALL_WRAP3 ( setresgid , compat_gid_t , rgid , compat_gid_t , egid , compat_gid_t , sgid ) ;
COMPAT_SYSCALL_WRAP3 ( getresgid , compat_gid_t __user * , rgid , compat_gid_t __user * , egid , compat_gid_t __user * , sgid ) ;
COMPAT_SYSCALL_WRAP3 ( chown , const char __user * , filename , compat_uid_t , user , compat_gid_t , group ) ;
2014-02-28 10:31:37 +01:00
COMPAT_SYSCALL_WRAP1 ( setuid , compat_uid_t , uid ) ;
COMPAT_SYSCALL_WRAP1 ( setgid , compat_gid_t , gid ) ;
COMPAT_SYSCALL_WRAP1 ( setfsuid , compat_uid_t , uid ) ;
COMPAT_SYSCALL_WRAP1 ( setfsgid , compat_gid_t , gid ) ;
COMPAT_SYSCALL_WRAP2 ( pivot_root , const char __user * , new_root , const char __user * , put_old ) ;
COMPAT_SYSCALL_WRAP3 ( mincore , compat_ulong_t , start , compat_size_t , len , unsigned char __user * , vec ) ;
COMPAT_SYSCALL_WRAP3 ( madvise , compat_ulong_t , start , compat_size_t , len , int , behavior ) ;
COMPAT_SYSCALL_WRAP5 ( setxattr , const char __user * , path , const char __user * , name , const void __user * , value , compat_size_t , size , int , flags ) ;
COMPAT_SYSCALL_WRAP5 ( lsetxattr , const char __user * , path , const char __user * , name , const void __user * , value , compat_size_t , size , int , flags ) ;
COMPAT_SYSCALL_WRAP5 ( fsetxattr , int , fd , const char __user * , name , const void __user * , value , compat_size_t , size , int , flags ) ;
2014-02-28 12:59:44 +01:00
COMPAT_SYSCALL_WRAP3 ( getdents64 , unsigned int , fd , struct linux_dirent64 __user * , dirent , unsigned int , count ) ;
COMPAT_SYSCALL_WRAP4 ( getxattr , const char __user * , path , const char __user * , name , void __user * , value , compat_size_t , size ) ;
COMPAT_SYSCALL_WRAP4 ( lgetxattr , const char __user * , path , const char __user * , name , void __user * , value , compat_size_t , size ) ;
COMPAT_SYSCALL_WRAP4 ( fgetxattr , int , fd , const char __user * , name , void __user * , value , compat_size_t , size ) ;
COMPAT_SYSCALL_WRAP3 ( listxattr , const char __user * , path , char __user * , list , compat_size_t , size ) ;
COMPAT_SYSCALL_WRAP3 ( llistxattr , const char __user * , path , char __user * , list , compat_size_t , size ) ;
COMPAT_SYSCALL_WRAP3 ( flistxattr , int , fd , char __user * , list , compat_size_t , size ) ;
COMPAT_SYSCALL_WRAP2 ( removexattr , const char __user * , path , const char __user * , name ) ;
COMPAT_SYSCALL_WRAP2 ( lremovexattr , const char __user * , path , const char __user * , name ) ;
COMPAT_SYSCALL_WRAP2 ( fremovexattr , int , fd , const char __user * , name ) ;
2014-02-28 13:22:47 +01:00
COMPAT_SYSCALL_WRAP1 ( exit_group , int , error_code ) ;
COMPAT_SYSCALL_WRAP1 ( set_tid_address , int __user * , tidptr ) ;
COMPAT_SYSCALL_WRAP1 ( epoll_create , int , size ) ;
COMPAT_SYSCALL_WRAP4 ( epoll_ctl , int , epfd , int , op , int , fd , struct epoll_event __user * , event ) ;
COMPAT_SYSCALL_WRAP4 ( epoll_wait , int , epfd , struct epoll_event __user * , events , int , maxevents , int , timeout ) ;
COMPAT_SYSCALL_WRAP1 ( timer_getoverrun , timer_t , timer_id ) ;
COMPAT_SYSCALL_WRAP1 ( timer_delete , compat_timer_t , compat_timer_id ) ;
COMPAT_SYSCALL_WRAP1 ( io_destroy , compat_aio_context_t , ctx ) ;
COMPAT_SYSCALL_WRAP3 ( io_cancel , compat_aio_context_t , ctx_id , struct iocb __user * , iocb , struct io_event __user * , result ) ;
COMPAT_SYSCALL_WRAP1 ( mq_unlink , const char __user * , name ) ;
2014-02-28 13:46:09 +01:00
COMPAT_SYSCALL_WRAP5 ( add_key , const char __user * , tp , const char __user * , dsc , const void __user * , pld , compat_size_t , len , key_serial_t , id ) ;
COMPAT_SYSCALL_WRAP4 ( request_key , const char __user * , tp , const char __user * , dsc , const char __user * , info , key_serial_t , id ) ;
COMPAT_SYSCALL_WRAP5 ( remap_file_pages , u32 , start , u32 , size , u32 , prot , u32 , pgoff , u32 , flags ) ;
COMPAT_SYSCALL_WRAP3 ( ioprio_set , int , which , int , who , int , ioprio ) ;
COMPAT_SYSCALL_WRAP2 ( ioprio_get , int , which , int , who ) ;
COMPAT_SYSCALL_WRAP3 ( inotify_add_watch , int , fd , const char __user * , path , u32 , mask ) ;
COMPAT_SYSCALL_WRAP2 ( inotify_rm_watch , int , fd , __s32 , wd ) ;
COMPAT_SYSCALL_WRAP3 ( mkdirat , int , dfd , const char __user * , pathname , umode_t , mode ) ;
COMPAT_SYSCALL_WRAP4 ( mknodat , int , dfd , const char __user * , filename , umode_t , mode , unsigned , dev ) ;
COMPAT_SYSCALL_WRAP5 ( fchownat , int , dfd , const char __user * , filename , compat_uid_t , user , compat_gid_t , group , int , flag ) ;
2014-02-28 15:33:00 +01:00
COMPAT_SYSCALL_WRAP3 ( unlinkat , int , dfd , const char __user * , pathname , int , flag ) ;
COMPAT_SYSCALL_WRAP4 ( renameat , int , olddfd , const char __user * , oldname , int , newdfd , const char __user * , newname ) ;
COMPAT_SYSCALL_WRAP5 ( linkat , int , olddfd , const char __user * , oldname , int , newdfd , const char __user * , newname , int , flags ) ;
COMPAT_SYSCALL_WRAP3 ( symlinkat , const char __user * , oldname , int , newdfd , const char __user * , newname ) ;
COMPAT_SYSCALL_WRAP4 ( readlinkat , int , dfd , const char __user * , path , char __user * , buf , int , bufsiz ) ;
COMPAT_SYSCALL_WRAP3 ( fchmodat , int , dfd , const char __user * , filename , umode_t , mode ) ;
COMPAT_SYSCALL_WRAP3 ( faccessat , int , dfd , const char __user * , filename , int , mode ) ;
COMPAT_SYSCALL_WRAP1 ( unshare , compat_ulong_t , unshare_flags ) ;
COMPAT_SYSCALL_WRAP6 ( splice , int , fd_in , loff_t __user * , off_in , int , fd_out , loff_t __user * , off_out , compat_size_t , len , unsigned int , flags ) ;
COMPAT_SYSCALL_WRAP4 ( tee , int , fdin , int , fdout , compat_size_t , len , unsigned int , flags ) ;
2014-03-01 11:52:48 +01:00
COMPAT_SYSCALL_WRAP3 ( getcpu , unsigned __user * , cpu , unsigned __user * , node , struct getcpu_cache __user * , cache ) ;
COMPAT_SYSCALL_WRAP1 ( eventfd , unsigned int , count ) ;
COMPAT_SYSCALL_WRAP2 ( timerfd_create , int , clockid , int , flags ) ;
COMPAT_SYSCALL_WRAP2 ( eventfd2 , unsigned int , count , int , flags ) ;
COMPAT_SYSCALL_WRAP1 ( inotify_init1 , int , flags ) ;
COMPAT_SYSCALL_WRAP2 ( pipe2 , int __user * , fildes , int , flags ) ;
COMPAT_SYSCALL_WRAP3 ( dup3 , unsigned int , oldfd , unsigned int , newfd , int , flags ) ;
COMPAT_SYSCALL_WRAP1 ( epoll_create1 , int , flags ) ;
COMPAT_SYSCALL_WRAP2 ( tkill , int , pid , int , sig ) ;
COMPAT_SYSCALL_WRAP3 ( tgkill , int , tgid , int , pid , int , sig ) ;
2014-03-01 12:18:46 +01:00
COMPAT_SYSCALL_WRAP5 ( perf_event_open , struct perf_event_attr __user * , attr_uptr , pid_t , pid , int , cpu , int , group_fd , u32 , flags ) ;
COMPAT_SYSCALL_WRAP5 ( clone , u32 , newsp , u32 , clone_flags , int __user * , parent_tidptr , int __user * , child_tidptr , int , tls_val ) ;
COMPAT_SYSCALL_WRAP2 ( fanotify_init , unsigned int , flags , unsigned int , event_f_flags ) ;
COMPAT_SYSCALL_WRAP4 ( prlimit64 , pid_t , pid , unsigned int , resource , const struct rlimit64 __user * , new_rlim , struct rlimit64 __user * , old_rlim ) ;
COMPAT_SYSCALL_WRAP5 ( name_to_handle_at , int , dfd , const char __user * , name , struct file_handle __user * , handle , int __user * , mnt_id , int , flag ) ;
COMPAT_SYSCALL_WRAP1 ( syncfs , int , fd ) ;
COMPAT_SYSCALL_WRAP2 ( setns , int , fd , int , nstype ) ;
COMPAT_SYSCALL_WRAP2 ( s390_runtime_instr , int , command , int , signum ) ;
COMPAT_SYSCALL_WRAP5 ( kcmp , pid_t , pid1 , pid_t , pid2 , int , type , u32 , idx1 , u32 , idx2 ) ;
COMPAT_SYSCALL_WRAP3 ( finit_module , int , fd , const char __user * , uargs , int , flags ) ;
COMPAT_SYSCALL_WRAP3 ( sched_setattr , pid_t , pid , struct sched_attr __user * , attr , unsigned int , flags ) ;
COMPAT_SYSCALL_WRAP4 ( sched_getattr , pid_t , pid , struct sched_attr __user * , attr , unsigned int , size , unsigned int , flags ) ;