MIPS: CVE-2009-0029: Enable syscall wrappers.
Thanks to David Daney helping with debugging and testing. Signed-off-by: Ralf Baechle <ralf@linux-mips.org> Signed-off-by: David Daney <ddaney@caviumnetworks.com>
This commit is contained in:
parent
4b0d3f5c28
commit
dbda6ac089
|
@ -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 @@
|
||||||
#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 @@
|
||||||
#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 {
|
||||||
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,
|
||||||
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,
|
||||||
|
|
||||||
#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)
|
||||||
|
|
||||||
#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)
|
||||||
#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)
|
||||||
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
|
||||||
|
|
||||||
#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)
|
||||||
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)
|
||||||
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 {
|
||||||
|
|
||||||
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 @@ out:
|
||||||
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
|
||||||
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
|
||||||
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:
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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:
|
||||||
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:
|
||||||
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:
|
||||||
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:
|
||||||
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:
|
||||||
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:
|
||||||
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:
|
||||||
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:
|
||||||
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 @@
|
||||||
#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)
|
||||||
}
|
}
|
||||||
|
|
||||||
#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)
|
||||||
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 = {
|
||||||
.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 @@ out:
|
||||||
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,
|
||||||
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,
|
||||||
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 *
|
||||||
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 @@ out:
|
||||||
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 @@ out:
|
||||||
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 @@ out:
|
||||||
/*
|
/*
|
||||||
* 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)
|
||||||
/*
|
/*
|
||||||
* 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)
|
||||||
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)
|
||||||
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)
|
||||||
*
|
*
|
||||||
* 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,
|
||||||
/*
|
/*
|
||||||
* 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 @@
|
||||||
#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);
|
||||||
* 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;
|
||||||
|
|
Loading…
Reference in New Issue