aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2013-03-02 10:19:56 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2013-03-03 22:59:48 -0500
commit76b021d053ed0b8de9689eefca5e8f53dade7fd7 (patch)
tree702ea1adb4d4295dcd95968e9e42d910ab22f807
parent8d2d5c4a251924e4f70657e96a2a3f87647544f0 (diff)
convert vmsplice to COMPAT_SYSCALL_DEFINE
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r--arch/s390/kernel/compat_wrapper.S7
-rw-r--r--arch/s390/kernel/syscalls.S2
-rw-r--r--arch/sparc/kernel/sys32.S1
-rw-r--r--arch/sparc/kernel/systbls_64.S2
-rw-r--r--fs/compat.c20
-rw-r--r--fs/splice.c22
6 files changed, 24 insertions, 30 deletions
diff --git a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S
index cee31d7910c0..68117a3dd252 100644
--- a/arch/s390/kernel/compat_wrapper.S
+++ b/arch/s390/kernel/compat_wrapper.S
@@ -1252,13 +1252,6 @@ ENTRY(sys_tee_wrapper)
1252 llgfr %r5,%r5 # unsigned int 1252 llgfr %r5,%r5 # unsigned int
1253 jg sys_tee 1253 jg sys_tee
1254 1254
1255ENTRY(compat_sys_vmsplice_wrapper)
1256 lgfr %r2,%r2 # int
1257 llgtr %r3,%r3 # compat_iovec *
1258 llgfr %r4,%r4 # unsigned int
1259 llgfr %r5,%r5 # unsigned int
1260 jg compat_sys_vmsplice
1261
1262ENTRY(sys_getcpu_wrapper) 1255ENTRY(sys_getcpu_wrapper)
1263 llgtr %r2,%r2 # unsigned * 1256 llgtr %r2,%r2 # unsigned *
1264 llgtr %r3,%r3 # unsigned * 1257 llgtr %r3,%r3 # unsigned *
diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S
index e9c8a88c748e..102254a4397d 100644
--- a/arch/s390/kernel/syscalls.S
+++ b/arch/s390/kernel/syscalls.S
@@ -317,7 +317,7 @@ SYSCALL(sys_get_robust_list,sys_get_robust_list,compat_sys_get_robust_list)
317SYSCALL(sys_splice,sys_splice,sys_splice_wrapper) 317SYSCALL(sys_splice,sys_splice,sys_splice_wrapper)
318SYSCALL(sys_sync_file_range,sys_sync_file_range,sys_sync_file_range_wrapper) 318SYSCALL(sys_sync_file_range,sys_sync_file_range,sys_sync_file_range_wrapper)
319SYSCALL(sys_tee,sys_tee,sys_tee_wrapper) 319SYSCALL(sys_tee,sys_tee,sys_tee_wrapper)
320SYSCALL(sys_vmsplice,sys_vmsplice,compat_sys_vmsplice_wrapper) 320SYSCALL(sys_vmsplice,sys_vmsplice,compat_sys_vmsplice)
321NI_SYSCALL /* 310 sys_move_pages */ 321NI_SYSCALL /* 310 sys_move_pages */
322SYSCALL(sys_getcpu,sys_getcpu,sys_getcpu_wrapper) 322SYSCALL(sys_getcpu,sys_getcpu,sys_getcpu_wrapper)
323SYSCALL(sys_epoll_pwait,sys_epoll_pwait,compat_sys_epoll_pwait) 323SYSCALL(sys_epoll_pwait,sys_epoll_pwait,compat_sys_epoll_pwait)
diff --git a/arch/sparc/kernel/sys32.S b/arch/sparc/kernel/sys32.S
index 0b4030aff2f8..0dbc2d6afdfc 100644
--- a/arch/sparc/kernel/sys32.S
+++ b/arch/sparc/kernel/sys32.S
@@ -49,7 +49,6 @@ SIGN1(sys32_recvfrom, compat_sys_recvfrom, %o0)
49SIGN1(sys32_recvmsg, compat_sys_recvmsg, %o0) 49SIGN1(sys32_recvmsg, compat_sys_recvmsg, %o0)
50SIGN1(sys32_sendmsg, compat_sys_sendmsg, %o0) 50SIGN1(sys32_sendmsg, compat_sys_sendmsg, %o0)
51SIGN2(sys32_sync_file_range, compat_sync_file_range, %o0, %o5) 51SIGN2(sys32_sync_file_range, compat_sync_file_range, %o0, %o5)
52SIGN1(sys32_vmsplice, compat_sys_vmsplice, %o0)
53 52
54 .globl sys32_mmap2 53 .globl sys32_mmap2
55sys32_mmap2: 54sys32_mmap2:
diff --git a/arch/sparc/kernel/systbls_64.S b/arch/sparc/kernel/systbls_64.S
index 423a4e2a77f7..46d575b6f696 100644
--- a/arch/sparc/kernel/systbls_64.S
+++ b/arch/sparc/kernel/systbls_64.S
@@ -23,7 +23,7 @@ sys_call_table32:
23/*10*/ .word sys_unlink, sunos_execv, sys_chdir, sys_chown16, sys_mknod 23/*10*/ .word sys_unlink, sunos_execv, sys_chdir, sys_chown16, sys_mknod
24/*15*/ .word sys_chmod, sys_lchown16, sys_brk, sys_nis_syscall, compat_sys_lseek 24/*15*/ .word sys_chmod, sys_lchown16, sys_brk, sys_nis_syscall, compat_sys_lseek
25/*20*/ .word sys_getpid, sys_capget, sys_capset, sys_setuid16, sys_getuid16 25/*20*/ .word sys_getpid, sys_capget, sys_capset, sys_setuid16, sys_getuid16
26/*25*/ .word sys32_vmsplice, compat_sys_ptrace, sys_alarm, compat_sys_sigaltstack, sys_pause 26/*25*/ .word compat_sys_vmsplice, compat_sys_ptrace, sys_alarm, compat_sys_sigaltstack, sys_pause
27/*30*/ .word compat_sys_utime, sys_lchown, sys_fchown, sys_access, sys_nice 27/*30*/ .word compat_sys_utime, sys_lchown, sys_fchown, sys_access, sys_nice
28 .word sys_chown, sys_sync, sys_kill, compat_sys_newstat, compat_sys_sendfile 28 .word sys_chown, sys_sync, sys_kill, compat_sys_newstat, compat_sys_sendfile
29/*40*/ .word compat_sys_newlstat, sys_dup, sys_sparc_pipe, compat_sys_times, sys_getuid 29/*40*/ .word compat_sys_newlstat, sys_dup, sys_sparc_pipe, compat_sys_times, sys_getuid
diff --git a/fs/compat.c b/fs/compat.c
index 45137a3832f3..b7a89b995564 100644
--- a/fs/compat.c
+++ b/fs/compat.c
@@ -1253,26 +1253,6 @@ compat_sys_pwritev(unsigned long fd, const struct compat_iovec __user *vec,
1253 return compat_sys_pwritev64(fd, vec, vlen, pos); 1253 return compat_sys_pwritev64(fd, vec, vlen, pos);
1254} 1254}
1255 1255
1256asmlinkage long
1257compat_sys_vmsplice(int fd, const struct compat_iovec __user *iov32,
1258 unsigned int nr_segs, unsigned int flags)
1259{
1260 unsigned i;
1261 struct iovec __user *iov;
1262 if (nr_segs > UIO_MAXIOV)
1263 return -EINVAL;
1264 iov = compat_alloc_user_space(nr_segs * sizeof(struct iovec));
1265 for (i = 0; i < nr_segs; i++) {
1266 struct compat_iovec v;
1267 if (get_user(v.iov_base, &iov32[i].iov_base) ||
1268 get_user(v.iov_len, &iov32[i].iov_len) ||
1269 put_user(compat_ptr(v.iov_base), &iov[i].iov_base) ||
1270 put_user(v.iov_len, &iov[i].iov_len))
1271 return -EFAULT;
1272 }
1273 return sys_vmsplice(fd, iov, nr_segs, flags);
1274}
1275
1276/* 1256/*
1277 * Exactly like fs/open.c:sys_open(), except that it doesn't set the 1257 * Exactly like fs/open.c:sys_open(), except that it doesn't set the
1278 * O_LARGEFILE flag. 1258 * O_LARGEFILE flag.
diff --git a/fs/splice.c b/fs/splice.c
index 718bd0056384..23ade0e5c559 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -31,6 +31,7 @@
31#include <linux/security.h> 31#include <linux/security.h>
32#include <linux/gfp.h> 32#include <linux/gfp.h>
33#include <linux/socket.h> 33#include <linux/socket.h>
34#include <linux/compat.h>
34 35
35/* 36/*
36 * Attempt to steal a page from a pipe buffer. This should perhaps go into 37 * Attempt to steal a page from a pipe buffer. This should perhaps go into
@@ -1688,6 +1689,27 @@ SYSCALL_DEFINE4(vmsplice, int, fd, const struct iovec __user *, iov,
1688 return error; 1689 return error;
1689} 1690}
1690 1691
1692#ifdef CONFIG_COMPAT
1693COMPAT_SYSCALL_DEFINE4(vmsplice, int, fd, const struct compat_iovec __user *, iov32,
1694 unsigned int, nr_segs, unsigned int, flags)
1695{
1696 unsigned i;
1697 struct iovec __user *iov;
1698 if (nr_segs > UIO_MAXIOV)
1699 return -EINVAL;
1700 iov = compat_alloc_user_space(nr_segs * sizeof(struct iovec));
1701 for (i = 0; i < nr_segs; i++) {
1702 struct compat_iovec v;
1703 if (get_user(v.iov_base, &iov32[i].iov_base) ||
1704 get_user(v.iov_len, &iov32[i].iov_len) ||
1705 put_user(compat_ptr(v.iov_base), &iov[i].iov_base) ||
1706 put_user(v.iov_len, &iov[i].iov_len))
1707 return -EFAULT;
1708 }
1709 return sys_vmsplice(fd, iov, nr_segs, flags);
1710}
1711#endif
1712
1691SYSCALL_DEFINE6(splice, int, fd_in, loff_t __user *, off_in, 1713SYSCALL_DEFINE6(splice, int, fd_in, loff_t __user *, off_in,
1692 int, fd_out, loff_t __user *, off_out, 1714 int, fd_out, loff_t __user *, off_out,
1693 size_t, len, unsigned int, flags) 1715 size_t, len, unsigned int, flags)