Commit dbda6ac0 authored by Ralf Baechle's avatar Ralf Baechle

MIPS: CVE-2009-0029: Enable syscall wrappers.

Thanks to David Daney helping with debugging and testing.
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
Signed-off-by: default avatarDavid Daney <ddaney@caviumnetworks.com>
parent 4b0d3f5c
...@@ -1391,6 +1391,7 @@ config 32BIT ...@@ -1391,6 +1391,7 @@ config 32BIT
config 64BIT config 64BIT
bool "64-bit kernel" bool "64-bit kernel"
depends on CPU_SUPPORTS_64BIT_KERNEL && SYS_SUPPORTS_64BIT_KERNEL depends on CPU_SUPPORTS_64BIT_KERNEL && SYS_SUPPORTS_64BIT_KERNEL
select HAVE_SYSCALL_WRAPPERS
help help
Select this option if you want to build a 64-bit kernel. Select this option if you want to build a 64-bit kernel.
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/binfmts.h> #include <linux/binfmts.h>
#include <linux/security.h> #include <linux/security.h>
#include <linux/syscalls.h>
#include <linux/compat.h> #include <linux/compat.h>
#include <linux/vfs.h> #include <linux/vfs.h>
#include <linux/ipc.h> #include <linux/ipc.h>
...@@ -63,9 +64,9 @@ ...@@ -63,9 +64,9 @@
#define merge_64(r1, r2) ((((r2) & 0xffffffffUL) << 32) + ((r1) & 0xffffffffUL)) #define merge_64(r1, r2) ((((r2) & 0xffffffffUL) << 32) + ((r1) & 0xffffffffUL))
#endif #endif
asmlinkage unsigned long SYSCALL_DEFINE6(32_mmap2, unsigned long, addr, unsigned long, len,
sys32_mmap2(unsigned long addr, unsigned long len, unsigned long prot, unsigned long, prot, unsigned long, flags, unsigned long, fd,
unsigned long flags, unsigned long fd, unsigned long pgoff) unsigned long, pgoff)
{ {
struct file * file = NULL; struct file * file = NULL;
unsigned long error; unsigned long error;
...@@ -121,21 +122,21 @@ struct rlimit32 { ...@@ -121,21 +122,21 @@ struct rlimit32 {
int rlim_max; int rlim_max;
}; };
asmlinkage long sys32_truncate64(const char __user * path, SYSCALL_DEFINE4(32_truncate64, const char __user *, path,
unsigned long __dummy, int a2, int a3) unsigned long, __dummy, unsigned long, a2, unsigned long, a3)
{ {
return sys_truncate(path, merge_64(a2, a3)); return sys_truncate(path, merge_64(a2, a3));
} }
asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long __dummy, SYSCALL_DEFINE4(32_ftruncate64, unsigned long, fd, unsigned long, __dummy,
int a2, int a3) unsigned long, a2, unsigned long, a3)
{ {
return sys_ftruncate(fd, merge_64(a2, a3)); return sys_ftruncate(fd, merge_64(a2, a3));
} }
asmlinkage int sys32_llseek(unsigned int fd, unsigned int offset_high, SYSCALL_DEFINE5(32_llseek, unsigned long, fd, unsigned long, offset_high,
unsigned int offset_low, loff_t __user * result, unsigned long, offset_low, loff_t __user *, result,
unsigned int origin) unsigned long, origin)
{ {
return sys_llseek(fd, offset_high, offset_low, result, origin); return sys_llseek(fd, offset_high, offset_low, result, origin);
} }
...@@ -144,20 +145,20 @@ asmlinkage int sys32_llseek(unsigned int fd, unsigned int offset_high, ...@@ -144,20 +145,20 @@ asmlinkage int sys32_llseek(unsigned int fd, unsigned int offset_high,
lseek back to original location. They fail just like lseek does on lseek back to original location. They fail just like lseek does on
non-seekable files. */ non-seekable files. */
asmlinkage ssize_t sys32_pread(unsigned int fd, char __user * buf, SYSCALL_DEFINE6(32_pread, unsigned long, fd, char __user *, buf, size_t, count,
size_t count, u32 unused, u64 a4, u64 a5) unsigned long, unused, unsigned long, a4, unsigned long, a5)
{ {
return sys_pread64(fd, buf, count, merge_64(a4, a5)); return sys_pread64(fd, buf, count, merge_64(a4, a5));
} }
asmlinkage ssize_t sys32_pwrite(unsigned int fd, const char __user * buf, SYSCALL_DEFINE6(32_pwrite, unsigned int, fd, const char __user *, buf,
size_t count, u32 unused, u64 a4, u64 a5) size_t, count, u32, unused, u64, a4, u64, a5)
{ {
return sys_pwrite64(fd, buf, count, merge_64(a4, a5)); return sys_pwrite64(fd, buf, count, merge_64(a4, a5));
} }
asmlinkage int sys32_sched_rr_get_interval(compat_pid_t pid, SYSCALL_DEFINE2(32_sched_rr_get_interval, compat_pid_t, pid,
struct compat_timespec __user *interval) struct compat_timespec __user *, interval)
{ {
struct timespec t; struct timespec t;
int ret; int ret;
...@@ -174,8 +175,8 @@ asmlinkage int sys32_sched_rr_get_interval(compat_pid_t pid, ...@@ -174,8 +175,8 @@ asmlinkage int sys32_sched_rr_get_interval(compat_pid_t pid,
#ifdef CONFIG_SYSVIPC #ifdef CONFIG_SYSVIPC
asmlinkage long SYSCALL_DEFINE6(32_ipc, u32, call, long, first, long, second, long, third,
sys32_ipc(u32 call, int first, int second, int third, u32 ptr, u32 fifth) unsigned long, ptr, unsigned long, fifth)
{ {
int version, err; int version, err;
...@@ -233,8 +234,8 @@ sys32_ipc(u32 call, int first, int second, int third, u32 ptr, u32 fifth) ...@@ -233,8 +234,8 @@ sys32_ipc(u32 call, int first, int second, int third, u32 ptr, u32 fifth)
#else #else
asmlinkage long SYSCALL_DEFINE6(32_ipc, u32, call, int, first, int, second, int, third,
sys32_ipc(u32 call, int first, int second, int third, u32 ptr, u32 fifth) u32, ptr, u32 fifth)
{ {
return -ENOSYS; return -ENOSYS;
} }
...@@ -242,7 +243,7 @@ sys32_ipc(u32 call, int first, int second, int third, u32 ptr, u32 fifth) ...@@ -242,7 +243,7 @@ sys32_ipc(u32 call, int first, int second, int third, u32 ptr, u32 fifth)
#endif /* CONFIG_SYSVIPC */ #endif /* CONFIG_SYSVIPC */
#ifdef CONFIG_MIPS32_N32 #ifdef CONFIG_MIPS32_N32
asmlinkage long sysn32_semctl(int semid, int semnum, int cmd, u32 arg) SYSCALL_DEFINE4(n32_semctl, int, semid, int, semnum, int, cmd, u32, arg)
{ {
/* compat_sys_semctl expects a pointer to union semun */ /* compat_sys_semctl expects a pointer to union semun */
u32 __user *uptr = compat_alloc_user_space(sizeof(u32)); u32 __user *uptr = compat_alloc_user_space(sizeof(u32));
...@@ -251,13 +252,14 @@ asmlinkage long sysn32_semctl(int semid, int semnum, int cmd, u32 arg) ...@@ -251,13 +252,14 @@ asmlinkage long sysn32_semctl(int semid, int semnum, int cmd, u32 arg)
return compat_sys_semctl(semid, semnum, cmd, uptr); return compat_sys_semctl(semid, semnum, cmd, uptr);
} }
asmlinkage long sysn32_msgsnd(int msqid, u32 msgp, unsigned msgsz, int msgflg) SYSCALL_DEFINE4(n32_msgsnd, int, msqid, u32, msgp, unsigned int, msgsz,
int, msgflg)
{ {
return compat_sys_msgsnd(msqid, msgsz, msgflg, compat_ptr(msgp)); return compat_sys_msgsnd(msqid, msgsz, msgflg, compat_ptr(msgp));
} }
asmlinkage long sysn32_msgrcv(int msqid, u32 msgp, size_t msgsz, int msgtyp, SYSCALL_DEFINE5(n32_msgrcv, int, msqid, u32, msgp, size_t, msgsz,
int msgflg) int, msgtyp, int, msgflg)
{ {
return compat_sys_msgrcv(msqid, msgsz, msgtyp, msgflg, IPC_64, return compat_sys_msgrcv(msqid, msgsz, msgtyp, msgflg, IPC_64,
compat_ptr(msgp)); compat_ptr(msgp));
...@@ -277,7 +279,7 @@ struct sysctl_args32 ...@@ -277,7 +279,7 @@ struct sysctl_args32
#ifdef CONFIG_SYSCTL_SYSCALL #ifdef CONFIG_SYSCTL_SYSCALL
asmlinkage long sys32_sysctl(struct sysctl_args32 __user *args) SYSCALL_DEFINE1(32_sysctl, struct sysctl_args32 __user *, args)
{ {
struct sysctl_args32 tmp; struct sysctl_args32 tmp;
int error; int error;
...@@ -316,9 +318,16 @@ asmlinkage long sys32_sysctl(struct sysctl_args32 __user *args) ...@@ -316,9 +318,16 @@ asmlinkage long sys32_sysctl(struct sysctl_args32 __user *args)
return error; return error;
} }
#else
SYSCALL_DEFINE1(32_sysctl, struct sysctl_args32 __user *, args)
{
return -ENOSYS;
}
#endif /* CONFIG_SYSCTL_SYSCALL */ #endif /* CONFIG_SYSCTL_SYSCALL */
asmlinkage long sys32_newuname(struct new_utsname __user * name) SYSCALL_DEFINE1(32_newuname, struct new_utsname __user *, name)
{ {
int ret = 0; int ret = 0;
...@@ -334,7 +343,7 @@ asmlinkage long sys32_newuname(struct new_utsname __user * name) ...@@ -334,7 +343,7 @@ asmlinkage long sys32_newuname(struct new_utsname __user * name)
return ret; return ret;
} }
asmlinkage int sys32_personality(unsigned long personality) SYSCALL_DEFINE1(32_personality, unsigned long, personality)
{ {
int ret; int ret;
personality &= 0xffffffff; personality &= 0xffffffff;
...@@ -357,7 +366,7 @@ struct ustat32 { ...@@ -357,7 +366,7 @@ struct ustat32 {
extern asmlinkage long sys_ustat(dev_t dev, struct ustat __user * ubuf); extern asmlinkage long sys_ustat(dev_t dev, struct ustat __user * ubuf);
asmlinkage int sys32_ustat(dev_t dev, struct ustat32 __user * ubuf32) SYSCALL_DEFINE2(32_ustat, dev_t, dev, struct ustat32 __user *, ubuf32)
{ {
int err; int err;
struct ustat tmp; struct ustat tmp;
...@@ -381,8 +390,8 @@ asmlinkage int sys32_ustat(dev_t dev, struct ustat32 __user * ubuf32) ...@@ -381,8 +390,8 @@ asmlinkage int sys32_ustat(dev_t dev, struct ustat32 __user * ubuf32)
return err; return err;
} }
asmlinkage int sys32_sendfile(int out_fd, int in_fd, compat_off_t __user *offset, SYSCALL_DEFINE4(32_sendfile, long, out_fd, long, in_fd,
s32 count) compat_off_t __user *, offset, s32, count)
{ {
mm_segment_t old_fs = get_fs(); mm_segment_t old_fs = get_fs();
int ret; int ret;
......
...@@ -399,7 +399,7 @@ einval: li v0, -ENOSYS ...@@ -399,7 +399,7 @@ einval: li v0, -ENOSYS
sys sys_swapon 2 sys sys_swapon 2
sys sys_reboot 3 sys sys_reboot 3
sys sys_old_readdir 3 sys sys_old_readdir 3
sys old_mmap 6 /* 4090 */ sys sys_mips_mmap 6 /* 4090 */
sys sys_munmap 2 sys sys_munmap 2
sys sys_truncate 2 sys sys_truncate 2
sys sys_ftruncate 2 sys sys_ftruncate 2
...@@ -519,7 +519,7 @@ einval: li v0, -ENOSYS ...@@ -519,7 +519,7 @@ einval: li v0, -ENOSYS
sys sys_sendfile 4 sys sys_sendfile 4
sys sys_ni_syscall 0 sys sys_ni_syscall 0
sys sys_ni_syscall 0 sys sys_ni_syscall 0
sys sys_mmap2 6 /* 4210 */ sys sys_mips_mmap2 6 /* 4210 */
sys sys_truncate64 4 sys sys_truncate64 4
sys sys_ftruncate64 4 sys sys_ftruncate64 4
sys sys_stat64 2 sys sys_stat64 2
......
...@@ -207,7 +207,7 @@ sys_call_table: ...@@ -207,7 +207,7 @@ sys_call_table:
PTR sys_newlstat PTR sys_newlstat
PTR sys_poll PTR sys_poll
PTR sys_lseek PTR sys_lseek
PTR old_mmap PTR sys_mips_mmap
PTR sys_mprotect /* 5010 */ PTR sys_mprotect /* 5010 */
PTR sys_munmap PTR sys_munmap
PTR sys_brk PTR sys_brk
......
...@@ -129,12 +129,12 @@ EXPORT(sysn32_call_table) ...@@ -129,12 +129,12 @@ EXPORT(sysn32_call_table)
PTR sys_newlstat PTR sys_newlstat
PTR sys_poll PTR sys_poll
PTR sys_lseek PTR sys_lseek
PTR old_mmap PTR sys_mips_mmap
PTR sys_mprotect /* 6010 */ PTR sys_mprotect /* 6010 */
PTR sys_munmap PTR sys_munmap
PTR sys_brk PTR sys_brk
PTR sys32_rt_sigaction PTR sys_32_rt_sigaction
PTR sys32_rt_sigprocmask PTR sys_32_rt_sigprocmask
PTR compat_sys_ioctl /* 6015 */ PTR compat_sys_ioctl /* 6015 */
PTR sys_pread64 PTR sys_pread64
PTR sys_pwrite64 PTR sys_pwrite64
...@@ -159,7 +159,7 @@ EXPORT(sysn32_call_table) ...@@ -159,7 +159,7 @@ EXPORT(sysn32_call_table)
PTR compat_sys_setitimer PTR compat_sys_setitimer
PTR sys_alarm PTR sys_alarm
PTR sys_getpid PTR sys_getpid
PTR sys32_sendfile PTR sys_32_sendfile
PTR sys_socket /* 6040 */ PTR sys_socket /* 6040 */
PTR sys_connect PTR sys_connect
PTR sys_accept PTR sys_accept
...@@ -181,14 +181,14 @@ EXPORT(sysn32_call_table) ...@@ -181,14 +181,14 @@ EXPORT(sysn32_call_table)
PTR sys_exit PTR sys_exit
PTR compat_sys_wait4 PTR compat_sys_wait4
PTR sys_kill /* 6060 */ PTR sys_kill /* 6060 */
PTR sys32_newuname PTR sys_32_newuname
PTR sys_semget PTR sys_semget
PTR sys_semop PTR sys_semop
PTR sysn32_semctl PTR sys_n32_semctl
PTR sys_shmdt /* 6065 */ PTR sys_shmdt /* 6065 */
PTR sys_msgget PTR sys_msgget
PTR sysn32_msgsnd PTR sys_n32_msgsnd
PTR sysn32_msgrcv PTR sys_n32_msgrcv
PTR compat_sys_msgctl PTR compat_sys_msgctl
PTR compat_sys_fcntl /* 6070 */ PTR compat_sys_fcntl /* 6070 */
PTR sys_flock PTR sys_flock
...@@ -245,15 +245,15 @@ EXPORT(sysn32_call_table) ...@@ -245,15 +245,15 @@ EXPORT(sysn32_call_table)
PTR sys_getsid PTR sys_getsid
PTR sys_capget PTR sys_capget
PTR sys_capset PTR sys_capset
PTR sys32_rt_sigpending /* 6125 */ PTR sys_32_rt_sigpending /* 6125 */
PTR compat_sys_rt_sigtimedwait PTR compat_sys_rt_sigtimedwait
PTR sys32_rt_sigqueueinfo PTR sys_32_rt_sigqueueinfo
PTR sysn32_rt_sigsuspend PTR sysn32_rt_sigsuspend
PTR sys32_sigaltstack PTR sys32_sigaltstack
PTR compat_sys_utime /* 6130 */ PTR compat_sys_utime /* 6130 */
PTR sys_mknod PTR sys_mknod
PTR sys32_personality PTR sys_32_personality
PTR sys32_ustat PTR sys_32_ustat
PTR compat_sys_statfs PTR compat_sys_statfs
PTR compat_sys_fstatfs /* 6135 */ PTR compat_sys_fstatfs /* 6135 */
PTR sys_sysfs PTR sys_sysfs
...@@ -265,14 +265,14 @@ EXPORT(sysn32_call_table) ...@@ -265,14 +265,14 @@ EXPORT(sysn32_call_table)
PTR sys_sched_getscheduler PTR sys_sched_getscheduler
PTR sys_sched_get_priority_max PTR sys_sched_get_priority_max
PTR sys_sched_get_priority_min PTR sys_sched_get_priority_min
PTR sys32_sched_rr_get_interval /* 6145 */ PTR sys_32_sched_rr_get_interval /* 6145 */
PTR sys_mlock PTR sys_mlock
PTR sys_munlock PTR sys_munlock
PTR sys_mlockall PTR sys_mlockall
PTR sys_munlockall PTR sys_munlockall
PTR sys_vhangup /* 6150 */ PTR sys_vhangup /* 6150 */
PTR sys_pivot_root PTR sys_pivot_root
PTR sys32_sysctl PTR sys_32_sysctl
PTR sys_prctl PTR sys_prctl
PTR compat_sys_adjtimex PTR compat_sys_adjtimex
PTR compat_sys_setrlimit /* 6155 */ PTR compat_sys_setrlimit /* 6155 */
......
...@@ -265,12 +265,12 @@ sys_call_table: ...@@ -265,12 +265,12 @@ sys_call_table:
PTR sys_olduname PTR sys_olduname
PTR sys_umask /* 4060 */ PTR sys_umask /* 4060 */
PTR sys_chroot PTR sys_chroot
PTR sys32_ustat PTR sys_32_ustat
PTR sys_dup2 PTR sys_dup2
PTR sys_getppid PTR sys_getppid
PTR sys_getpgrp /* 4065 */ PTR sys_getpgrp /* 4065 */
PTR sys_setsid PTR sys_setsid
PTR sys32_sigaction PTR sys_32_sigaction
PTR sys_sgetmask PTR sys_sgetmask
PTR sys_ssetmask PTR sys_ssetmask
PTR sys_setreuid /* 4070 */ PTR sys_setreuid /* 4070 */
...@@ -293,7 +293,7 @@ sys_call_table: ...@@ -293,7 +293,7 @@ sys_call_table:
PTR sys_swapon PTR sys_swapon
PTR sys_reboot PTR sys_reboot
PTR compat_sys_old_readdir PTR compat_sys_old_readdir
PTR old_mmap /* 4090 */ PTR sys_mips_mmap /* 4090 */
PTR sys_munmap PTR sys_munmap
PTR sys_truncate PTR sys_truncate
PTR sys_ftruncate PTR sys_ftruncate
...@@ -320,12 +320,12 @@ sys_call_table: ...@@ -320,12 +320,12 @@ sys_call_table:
PTR compat_sys_wait4 PTR compat_sys_wait4
PTR sys_swapoff /* 4115 */ PTR sys_swapoff /* 4115 */
PTR compat_sys_sysinfo PTR compat_sys_sysinfo
PTR sys32_ipc PTR sys_32_ipc
PTR sys_fsync PTR sys_fsync
PTR sys32_sigreturn PTR sys32_sigreturn
PTR sys32_clone /* 4120 */ PTR sys32_clone /* 4120 */
PTR sys_setdomainname PTR sys_setdomainname
PTR sys32_newuname PTR sys_32_newuname
PTR sys_ni_syscall /* sys_modify_ldt */ PTR sys_ni_syscall /* sys_modify_ldt */
PTR compat_sys_adjtimex PTR compat_sys_adjtimex
PTR sys_mprotect /* 4125 */ PTR sys_mprotect /* 4125 */
...@@ -339,11 +339,11 @@ sys_call_table: ...@@ -339,11 +339,11 @@ sys_call_table:
PTR sys_fchdir PTR sys_fchdir
PTR sys_bdflush PTR sys_bdflush
PTR sys_sysfs /* 4135 */ PTR sys_sysfs /* 4135 */
PTR sys32_personality PTR sys_32_personality
PTR sys_ni_syscall /* for afs_syscall */ PTR sys_ni_syscall /* for afs_syscall */
PTR sys_setfsuid PTR sys_setfsuid
PTR sys_setfsgid PTR sys_setfsgid
PTR sys32_llseek /* 4140 */ PTR sys_32_llseek /* 4140 */
PTR compat_sys_getdents PTR compat_sys_getdents
PTR compat_sys_select PTR compat_sys_select
PTR sys_flock PTR sys_flock
...@@ -356,7 +356,7 @@ sys_call_table: ...@@ -356,7 +356,7 @@ sys_call_table:
PTR sys_ni_syscall /* 4150 */ PTR sys_ni_syscall /* 4150 */
PTR sys_getsid PTR sys_getsid
PTR sys_fdatasync PTR sys_fdatasync
PTR sys32_sysctl PTR sys_32_sysctl
PTR sys_mlock PTR sys_mlock
PTR sys_munlock /* 4155 */ PTR sys_munlock /* 4155 */
PTR sys_mlockall PTR sys_mlockall
...@@ -368,7 +368,7 @@ sys_call_table: ...@@ -368,7 +368,7 @@ sys_call_table:
PTR sys_sched_yield PTR sys_sched_yield
PTR sys_sched_get_priority_max PTR sys_sched_get_priority_max
PTR sys_sched_get_priority_min PTR sys_sched_get_priority_min
PTR sys32_sched_rr_get_interval /* 4165 */ PTR sys_32_sched_rr_get_interval /* 4165 */
PTR compat_sys_nanosleep PTR compat_sys_nanosleep
PTR sys_mremap PTR sys_mremap
PTR sys_accept PTR sys_accept
...@@ -397,25 +397,25 @@ sys_call_table: ...@@ -397,25 +397,25 @@ sys_call_table:
PTR sys_getresgid PTR sys_getresgid
PTR sys_prctl PTR sys_prctl
PTR sys32_rt_sigreturn PTR sys32_rt_sigreturn
PTR sys32_rt_sigaction PTR sys_32_rt_sigaction
PTR sys32_rt_sigprocmask /* 4195 */ PTR sys_32_rt_sigprocmask /* 4195 */
PTR sys32_rt_sigpending PTR sys_32_rt_sigpending
PTR compat_sys_rt_sigtimedwait PTR compat_sys_rt_sigtimedwait
PTR sys32_rt_sigqueueinfo PTR sys_32_rt_sigqueueinfo
PTR sys32_rt_sigsuspend PTR sys32_rt_sigsuspend
PTR sys32_pread /* 4200 */ PTR sys_32_pread /* 4200 */
PTR sys32_pwrite PTR sys_32_pwrite
PTR sys_chown PTR sys_chown
PTR sys_getcwd PTR sys_getcwd
PTR sys_capget PTR sys_capget
PTR sys_capset /* 4205 */ PTR sys_capset /* 4205 */
PTR sys32_sigaltstack PTR sys32_sigaltstack
PTR sys32_sendfile PTR sys_32_sendfile
PTR sys_ni_syscall PTR sys_ni_syscall
PTR sys_ni_syscall PTR sys_ni_syscall
PTR sys32_mmap2 /* 4210 */ PTR sys_mips_mmap2 /* 4210 */
PTR sys32_truncate64 PTR sys_32_truncate64
PTR sys32_ftruncate64 PTR sys_32_ftruncate64
PTR sys_newstat PTR sys_newstat
PTR sys_newlstat PTR sys_newlstat
PTR sys_newfstat /* 4215 */ PTR sys_newfstat /* 4215 */
...@@ -481,7 +481,7 @@ sys_call_table: ...@@ -481,7 +481,7 @@ sys_call_table:
PTR compat_sys_mq_notify /* 4275 */ PTR compat_sys_mq_notify /* 4275 */
PTR compat_sys_mq_getsetattr PTR compat_sys_mq_getsetattr
PTR sys_ni_syscall /* sys_vserver */ PTR sys_ni_syscall /* sys_vserver */
PTR sys32_waitid PTR sys_32_waitid
PTR sys_ni_syscall /* available, was setaltroot */ PTR sys_ni_syscall /* available, was setaltroot */
PTR sys_add_key /* 4280 */ PTR sys_add_key /* 4280 */
PTR sys_request_key PTR sys_request_key
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <linux/ptrace.h> #include <linux/ptrace.h>
#include <linux/unistd.h> #include <linux/unistd.h>
#include <linux/compiler.h> #include <linux/compiler.h>
#include <linux/syscalls.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <asm/abi.h> #include <asm/abi.h>
...@@ -338,8 +339,8 @@ asmlinkage int sys_rt_sigsuspend(nabi_no_regargs struct pt_regs regs) ...@@ -338,8 +339,8 @@ asmlinkage int sys_rt_sigsuspend(nabi_no_regargs struct pt_regs regs)
} }
#ifdef CONFIG_TRAD_SIGNALS #ifdef CONFIG_TRAD_SIGNALS
asmlinkage int sys_sigaction(int sig, const struct sigaction __user *act, SYSCALL_DEFINE3(sigaction, int, sig, const struct sigaction __user *, act,
struct sigaction __user *oact) struct sigaction __user *, oact)
{ {
struct k_sigaction new_ka, old_ka; struct k_sigaction new_ka, old_ka;
int ret; int ret;
......
...@@ -349,8 +349,8 @@ asmlinkage int sys32_rt_sigsuspend(nabi_no_regargs struct pt_regs regs) ...@@ -349,8 +349,8 @@ asmlinkage int sys32_rt_sigsuspend(nabi_no_regargs struct pt_regs regs)
return -ERESTARTNOHAND; return -ERESTARTNOHAND;
} }
asmlinkage int sys32_sigaction(int sig, const struct sigaction32 __user *act, SYSCALL_DEFINE3(32_sigaction, long, sig, const struct sigaction32 __user *, act,
struct sigaction32 __user *oact) struct sigaction32 __user *, oact)
{ {
struct k_sigaction new_ka, old_ka; struct k_sigaction new_ka, old_ka;
int ret; int ret;
...@@ -704,9 +704,9 @@ struct mips_abi mips_abi_32 = { ...@@ -704,9 +704,9 @@ struct mips_abi mips_abi_32 = {
.restart = __NR_O32_restart_syscall .restart = __NR_O32_restart_syscall
}; };
asmlinkage int sys32_rt_sigaction(int sig, const struct sigaction32 __user *act, SYSCALL_DEFINE4(32_rt_sigaction, int, sig,
struct sigaction32 __user *oact, const struct sigaction32 __user *, act,
unsigned int sigsetsize) struct sigaction32 __user *, oact, unsigned int, sigsetsize)
{ {
struct k_sigaction new_sa, old_sa; struct k_sigaction new_sa, old_sa;
int ret = -EINVAL; int ret = -EINVAL;
...@@ -748,8 +748,8 @@ asmlinkage int sys32_rt_sigaction(int sig, const struct sigaction32 __user *act, ...@@ -748,8 +748,8 @@ asmlinkage int sys32_rt_sigaction(int sig, const struct sigaction32 __user *act,
return ret; return ret;
} }
asmlinkage int sys32_rt_sigprocmask(int how, compat_sigset_t __user *set, SYSCALL_DEFINE4(32_rt_sigprocmask, int, how, compat_sigset_t __user *, set,
compat_sigset_t __user *oset, unsigned int sigsetsize) compat_sigset_t __user *, oset, unsigned int, sigsetsize)
{ {
sigset_t old_set, new_set; sigset_t old_set, new_set;
int ret; int ret;
...@@ -770,8 +770,8 @@ asmlinkage int sys32_rt_sigprocmask(int how, compat_sigset_t __user *set, ...@@ -770,8 +770,8 @@ asmlinkage int sys32_rt_sigprocmask(int how, compat_sigset_t __user *set,
return ret; return ret;
} }
asmlinkage int sys32_rt_sigpending(compat_sigset_t __user *uset, SYSCALL_DEFINE2(32_rt_sigpending, compat_sigset_t __user *, uset,
unsigned int sigsetsize) unsigned int, sigsetsize)
{ {
int ret; int ret;
sigset_t set; sigset_t set;
...@@ -787,7 +787,8 @@ asmlinkage int sys32_rt_sigpending(compat_sigset_t __user *uset, ...@@ -787,7 +787,8 @@ asmlinkage int sys32_rt_sigpending(compat_sigset_t __user *uset,
return ret; return ret;
} }
asmlinkage int sys32_rt_sigqueueinfo(int pid, int sig, compat_siginfo_t __user *uinfo) SYSCALL_DEFINE3(32_rt_sigqueueinfo, int, pid, int, sig,
compat_siginfo_t __user *, uinfo)
{ {
siginfo_t info; siginfo_t info;
int ret; int ret;
...@@ -802,10 +803,9 @@ asmlinkage int sys32_rt_sigqueueinfo(int pid, int sig, compat_siginfo_t __user * ...@@ -802,10 +803,9 @@ asmlinkage int sys32_rt_sigqueueinfo(int pid, int sig, compat_siginfo_t __user *
return ret; return ret;
} }
asmlinkage long SYSCALL_DEFINE5(32_waitid, int, which, compat_pid_t, pid,
sys32_waitid(int which, compat_pid_t pid, compat_siginfo_t __user *, uinfo, int, options,
compat_siginfo_t __user *uinfo, int options, struct compat_rusage __user *, uru)
struct compat_rusage __user *uru)
{ {
siginfo_t info; siginfo_t info;
struct rusage ru; struct rusage ru;
......
...@@ -152,9 +152,9 @@ do_mmap2(unsigned long addr, unsigned long len, unsigned long prot, ...@@ -152,9 +152,9 @@ do_mmap2(unsigned long addr, unsigned long len, unsigned long prot,
return error; return error;
} }
asmlinkage unsigned long SYSCALL_DEFINE6(mips_mmap, unsigned long, addr, unsigned long, len,
old_mmap(unsigned long addr, unsigned long len, int prot, unsigned long, prot, unsigned long, flags, unsigned long,
int flags, int fd, off_t offset) fd, off_t, offset)
{ {
unsigned long result; unsigned long result;
...@@ -168,9 +168,9 @@ old_mmap(unsigned long addr, unsigned long len, int prot, ...@@ -168,9 +168,9 @@ old_mmap(unsigned long addr, unsigned long len, int prot,
return result; return result;
} }
asmlinkage unsigned long SYSCALL_DEFINE6(mips_mmap2, unsigned long, addr, unsigned long, len,
sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot, unsigned long, prot, unsigned long, flags, unsigned long, fd,
unsigned long flags, unsigned long fd, unsigned long pgoff) unsigned long, pgoff)
{ {
if (pgoff & (~PAGE_MASK >> 12)) if (pgoff & (~PAGE_MASK >> 12))
return -EINVAL; return -EINVAL;
...@@ -240,7 +240,7 @@ asmlinkage int sys_execve(nabi_no_regargs struct pt_regs regs) ...@@ -240,7 +240,7 @@ asmlinkage int sys_execve(nabi_no_regargs struct pt_regs regs)
/* /*
* Compacrapability ... * Compacrapability ...
*/ */
asmlinkage int sys_uname(struct old_utsname __user * name) SYSCALL_DEFINE1(uname, struct old_utsname __user *, name)
{ {
if (name && !copy_to_user(name, utsname(), sizeof (*name))) if (name && !copy_to_user(name, utsname(), sizeof (*name)))
return 0; return 0;
...@@ -250,7 +250,7 @@ asmlinkage int sys_uname(struct old_utsname __user * name) ...@@ -250,7 +250,7 @@ asmlinkage int sys_uname(struct old_utsname __user * name)
/* /*
* Compacrapability ... * Compacrapability ...
*/ */
asmlinkage int sys_olduname(struct oldold_utsname __user * name) SYSCALL_DEFINE1(olduname, struct oldold_utsname __user *, name)
{ {
int error; int error;
...@@ -279,7 +279,7 @@ asmlinkage int sys_olduname(struct oldold_utsname __user * name) ...@@ -279,7 +279,7 @@ asmlinkage int sys_olduname(struct oldold_utsname __user * name)
return error; return error;
} }
asmlinkage int sys_set_thread_area(unsigned long addr) SYSCALL_DEFINE1(set_thread_area, unsigned long, addr)
{ {
struct thread_info *ti = task_thread_info(current); struct thread_info *ti = task_thread_info(current);
...@@ -290,7 +290,7 @@ asmlinkage int sys_set_thread_area(unsigned long addr) ...@@ -290,7 +290,7 @@ asmlinkage int sys_set_thread_area(unsigned long addr)
return 0; return 0;
} }
asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3) asmlinkage int _sys_sysmips(long cmd, long arg1, long arg2, long arg3)
{ {
switch (cmd) { switch (cmd) {
case MIPS_ATOMIC_SET: case MIPS_ATOMIC_SET:
...@@ -325,8 +325,8 @@ asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3) ...@@ -325,8 +325,8 @@ asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3)
* *
* This is really horribly ugly. * This is really horribly ugly.
*/ */
asmlinkage int sys_ipc(unsigned int call, int first, int second, SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, int, second,
unsigned long third, void __user *ptr, long fifth) unsigned long, third, void __user *, ptr, long, fifth)
{ {
int version, ret; int version, ret;
...@@ -411,7 +411,7 @@ asmlinkage int sys_ipc(unsigned int call, int first, int second, ...@@ -411,7 +411,7 @@ asmlinkage int sys_ipc(unsigned int call, int first, int second,
/* /*
* No implemented yet ... * No implemented yet ...
*/ */
asmlinkage int sys_cachectl(char *addr, int nbytes, int op) SYSCALL_DEFINE3(cachectl, char *, addr, int, nbytes, int, op)
{ {
return -ENOSYS; return -ENOSYS;
} }
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <linux/linkage.h> #include <linux/linkage.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/syscalls.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
...@@ -58,8 +59,8 @@ EXPORT_SYMBOL(_dma_cache_wback_inv); ...@@ -58,8 +59,8 @@ EXPORT_SYMBOL(_dma_cache_wback_inv);
* We could optimize the case where the cache argument is not BCACHE but * We could optimize the case where the cache argument is not BCACHE but
* that seems very atypical use ... * that seems very atypical use ...
*/ */
asmlinkage int sys_cacheflush(unsigned long addr, SYSCALL_DEFINE3(cacheflush, unsigned long, addr, unsigned long, bytes,
unsigned long bytes, unsigned int cache) unsigned int, cache)
{ {
if (bytes == 0) if (bytes == 0)
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment