Commit 598b3cec authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Al Viro

fs: remove compat_sys_vmsplice

Now that import_iovec handles compat iovecs, the native vmsplice syscall
can be used for the compat case as well.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 5f764d62
...@@ -697,7 +697,7 @@ __SYSCALL(__NR_sync_file_range2, compat_sys_aarch32_sync_file_range2) ...@@ -697,7 +697,7 @@ __SYSCALL(__NR_sync_file_range2, compat_sys_aarch32_sync_file_range2)
#define __NR_tee 342 #define __NR_tee 342
__SYSCALL(__NR_tee, sys_tee) __SYSCALL(__NR_tee, sys_tee)
#define __NR_vmsplice 343 #define __NR_vmsplice 343
__SYSCALL(__NR_vmsplice, compat_sys_vmsplice) __SYSCALL(__NR_vmsplice, sys_vmsplice)
#define __NR_move_pages 344 #define __NR_move_pages 344
__SYSCALL(__NR_move_pages, compat_sys_move_pages) __SYSCALL(__NR_move_pages, compat_sys_move_pages)
#define __NR_getcpu 345 #define __NR_getcpu 345
......
...@@ -278,7 +278,7 @@ ...@@ -278,7 +278,7 @@
267 n32 splice sys_splice 267 n32 splice sys_splice
268 n32 sync_file_range sys_sync_file_range 268 n32 sync_file_range sys_sync_file_range
269 n32 tee sys_tee 269 n32 tee sys_tee
270 n32 vmsplice compat_sys_vmsplice 270 n32 vmsplice sys_vmsplice
271 n32 move_pages compat_sys_move_pages 271 n32 move_pages compat_sys_move_pages
272 n32 set_robust_list compat_sys_set_robust_list 272 n32 set_robust_list compat_sys_set_robust_list
273 n32 get_robust_list compat_sys_get_robust_list 273 n32 get_robust_list compat_sys_get_robust_list
......
...@@ -318,7 +318,7 @@ ...@@ -318,7 +318,7 @@
304 o32 splice sys_splice 304 o32 splice sys_splice
305 o32 sync_file_range sys_sync_file_range sys32_sync_file_range 305 o32 sync_file_range sys_sync_file_range sys32_sync_file_range
306 o32 tee sys_tee 306 o32 tee sys_tee
307 o32 vmsplice sys_vmsplice compat_sys_vmsplice 307 o32 vmsplice sys_vmsplice
308 o32 move_pages sys_move_pages compat_sys_move_pages 308 o32 move_pages sys_move_pages compat_sys_move_pages
309 o32 set_robust_list sys_set_robust_list compat_sys_set_robust_list 309 o32 set_robust_list sys_set_robust_list compat_sys_set_robust_list
310 o32 get_robust_list sys_get_robust_list compat_sys_get_robust_list 310 o32 get_robust_list sys_get_robust_list compat_sys_get_robust_list
......
...@@ -330,7 +330,7 @@ ...@@ -330,7 +330,7 @@
292 32 sync_file_range parisc_sync_file_range 292 32 sync_file_range parisc_sync_file_range
292 64 sync_file_range sys_sync_file_range 292 64 sync_file_range sys_sync_file_range
293 common tee sys_tee 293 common tee sys_tee
294 common vmsplice sys_vmsplice compat_sys_vmsplice 294 common vmsplice sys_vmsplice
295 common move_pages sys_move_pages compat_sys_move_pages 295 common move_pages sys_move_pages compat_sys_move_pages
296 common getcpu sys_getcpu 296 common getcpu sys_getcpu
297 common epoll_pwait sys_epoll_pwait compat_sys_epoll_pwait 297 common epoll_pwait sys_epoll_pwait compat_sys_epoll_pwait
......
...@@ -369,7 +369,7 @@ ...@@ -369,7 +369,7 @@
282 common unshare sys_unshare 282 common unshare sys_unshare
283 common splice sys_splice 283 common splice sys_splice
284 common tee sys_tee 284 common tee sys_tee
285 common vmsplice sys_vmsplice compat_sys_vmsplice 285 common vmsplice sys_vmsplice
286 common openat sys_openat compat_sys_openat 286 common openat sys_openat compat_sys_openat
287 common mkdirat sys_mkdirat 287 common mkdirat sys_mkdirat
288 common mknodat sys_mknodat 288 common mknodat sys_mknodat
......
...@@ -316,7 +316,7 @@ ...@@ -316,7 +316,7 @@
306 common splice sys_splice sys_splice 306 common splice sys_splice sys_splice
307 common sync_file_range sys_sync_file_range compat_sys_s390_sync_file_range 307 common sync_file_range sys_sync_file_range compat_sys_s390_sync_file_range
308 common tee sys_tee sys_tee 308 common tee sys_tee sys_tee
309 common vmsplice sys_vmsplice compat_sys_vmsplice 309 common vmsplice sys_vmsplice sys_vmsplice
310 common move_pages sys_move_pages compat_sys_move_pages 310 common move_pages sys_move_pages compat_sys_move_pages
311 common getcpu sys_getcpu sys_getcpu 311 common getcpu sys_getcpu sys_getcpu
312 common epoll_pwait sys_epoll_pwait compat_sys_epoll_pwait 312 common epoll_pwait sys_epoll_pwait compat_sys_epoll_pwait
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
23 64 setuid sys_setuid 23 64 setuid sys_setuid
24 32 getuid sys_getuid16 24 32 getuid sys_getuid16
24 64 getuid sys_getuid 24 64 getuid sys_getuid
25 common vmsplice sys_vmsplice compat_sys_vmsplice 25 common vmsplice sys_vmsplice
26 common ptrace sys_ptrace compat_sys_ptrace 26 common ptrace sys_ptrace compat_sys_ptrace
27 common alarm sys_alarm 27 common alarm sys_alarm
28 common sigaltstack sys_sigaltstack compat_sys_sigaltstack 28 common sigaltstack sys_sigaltstack compat_sys_sigaltstack
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#define __x32_sys_writev __x64_sys_writev #define __x32_sys_writev __x64_sys_writev
#define __x32_sys_getsockopt __x64_sys_getsockopt #define __x32_sys_getsockopt __x64_sys_getsockopt
#define __x32_sys_setsockopt __x64_sys_setsockopt #define __x32_sys_setsockopt __x64_sys_setsockopt
#define __x32_sys_vmsplice __x64_sys_vmsplice
#define __SYSCALL_64(nr, sym) #define __SYSCALL_64(nr, sym)
......
...@@ -327,7 +327,7 @@ ...@@ -327,7 +327,7 @@
313 i386 splice sys_splice 313 i386 splice sys_splice
314 i386 sync_file_range sys_ia32_sync_file_range 314 i386 sync_file_range sys_ia32_sync_file_range
315 i386 tee sys_tee 315 i386 tee sys_tee
316 i386 vmsplice sys_vmsplice compat_sys_vmsplice 316 i386 vmsplice sys_vmsplice
317 i386 move_pages sys_move_pages compat_sys_move_pages 317 i386 move_pages sys_move_pages compat_sys_move_pages
318 i386 getcpu sys_getcpu 318 i386 getcpu sys_getcpu
319 i386 epoll_pwait sys_epoll_pwait 319 i386 epoll_pwait sys_epoll_pwait
......
...@@ -388,7 +388,7 @@ ...@@ -388,7 +388,7 @@
529 x32 waitid compat_sys_waitid 529 x32 waitid compat_sys_waitid
530 x32 set_robust_list compat_sys_set_robust_list 530 x32 set_robust_list compat_sys_set_robust_list
531 x32 get_robust_list compat_sys_get_robust_list 531 x32 get_robust_list compat_sys_get_robust_list
532 x32 vmsplice compat_sys_vmsplice 532 x32 vmsplice sys_vmsplice
533 x32 move_pages compat_sys_move_pages 533 x32 move_pages compat_sys_move_pages
534 x32 preadv compat_sys_preadv64 534 x32 preadv compat_sys_preadv64
535 x32 pwritev compat_sys_pwritev64 535 x32 pwritev compat_sys_pwritev64
......
...@@ -33,7 +33,6 @@ ...@@ -33,7 +33,6 @@
#include <linux/security.h> #include <linux/security.h>
#include <linux/gfp.h> #include <linux/gfp.h>
#include <linux/socket.h> #include <linux/socket.h>
#include <linux/compat.h>
#include <linux/sched/signal.h> #include <linux/sched/signal.h>
#include "internal.h" #include "internal.h"
...@@ -1332,20 +1331,6 @@ static int vmsplice_type(struct fd f, int *type) ...@@ -1332,20 +1331,6 @@ static int vmsplice_type(struct fd f, int *type)
* Currently we punt and implement it as a normal copy, see pipe_to_user(). * Currently we punt and implement it as a normal copy, see pipe_to_user().
* *
*/ */
static long do_vmsplice(struct file *f, struct iov_iter *iter, unsigned int flags)
{
if (unlikely(flags & ~SPLICE_F_ALL))
return -EINVAL;
if (!iov_iter_count(iter))
return 0;
if (iov_iter_rw(iter) == WRITE)
return vmsplice_to_pipe(f, iter, flags);
else
return vmsplice_to_user(f, iter, flags);
}
SYSCALL_DEFINE4(vmsplice, int, fd, const struct iovec __user *, uiov, SYSCALL_DEFINE4(vmsplice, int, fd, const struct iovec __user *, uiov,
unsigned long, nr_segs, unsigned int, flags) unsigned long, nr_segs, unsigned int, flags)
{ {
...@@ -1356,6 +1341,9 @@ SYSCALL_DEFINE4(vmsplice, int, fd, const struct iovec __user *, uiov, ...@@ -1356,6 +1341,9 @@ SYSCALL_DEFINE4(vmsplice, int, fd, const struct iovec __user *, uiov,
struct fd f; struct fd f;
int type; int type;
if (unlikely(flags & ~SPLICE_F_ALL))
return -EINVAL;
f = fdget(fd); f = fdget(fd);
error = vmsplice_type(f, &type); error = vmsplice_type(f, &type);
if (error) if (error)
...@@ -1363,40 +1351,21 @@ SYSCALL_DEFINE4(vmsplice, int, fd, const struct iovec __user *, uiov, ...@@ -1363,40 +1351,21 @@ SYSCALL_DEFINE4(vmsplice, int, fd, const struct iovec __user *, uiov,
error = import_iovec(type, uiov, nr_segs, error = import_iovec(type, uiov, nr_segs,
ARRAY_SIZE(iovstack), &iov, &iter); ARRAY_SIZE(iovstack), &iov, &iter);
if (error >= 0) { if (error < 0)
error = do_vmsplice(f.file, &iter, flags); goto out_fdput;
kfree(iov);
}
fdput(f);
return error;
}
#ifdef CONFIG_COMPAT if (!iov_iter_count(&iter))
COMPAT_SYSCALL_DEFINE4(vmsplice, int, fd, const struct compat_iovec __user *, iov32, error = 0;
unsigned int, nr_segs, unsigned int, flags) else if (iov_iter_rw(&iter) == WRITE)
{ error = vmsplice_to_pipe(f.file, &iter, flags);
struct iovec iovstack[UIO_FASTIOV]; else
struct iovec *iov = iovstack; error = vmsplice_to_user(f.file, &iter, flags);
struct iov_iter iter;
ssize_t error;
struct fd f;
int type;
f = fdget(fd);
error = vmsplice_type(f, &type);
if (error)
return error;
error = import_iovec(type, (struct iovec __user *)iov32, nr_segs, kfree(iov);
ARRAY_SIZE(iovstack), &iov, &iter); out_fdput:
if (error >= 0) {
error = do_vmsplice(f.file, &iter, flags);
kfree(iov);
}
fdput(f); fdput(f);
return error; return error;
} }
#endif
SYSCALL_DEFINE6(splice, int, fd_in, loff_t __user *, off_in, SYSCALL_DEFINE6(splice, int, fd_in, loff_t __user *, off_in,
int, fd_out, loff_t __user *, off_out, int, fd_out, loff_t __user *, off_out,
......
...@@ -597,10 +597,6 @@ asmlinkage long compat_sys_signalfd4(int ufd, ...@@ -597,10 +597,6 @@ asmlinkage long compat_sys_signalfd4(int ufd,
const compat_sigset_t __user *sigmask, const compat_sigset_t __user *sigmask,
compat_size_t sigsetsize, int flags); compat_size_t sigsetsize, int flags);
/* fs/splice.c */
asmlinkage long compat_sys_vmsplice(int fd, const struct compat_iovec __user *,
unsigned int nr_segs, unsigned int flags);
/* fs/stat.c */ /* fs/stat.c */
asmlinkage long compat_sys_newfstatat(unsigned int dfd, asmlinkage long compat_sys_newfstatat(unsigned int dfd,
const char __user *filename, const char __user *filename,
......
...@@ -237,7 +237,7 @@ __SC_COMP(__NR_signalfd4, sys_signalfd4, compat_sys_signalfd4) ...@@ -237,7 +237,7 @@ __SC_COMP(__NR_signalfd4, sys_signalfd4, compat_sys_signalfd4)
/* fs/splice.c */ /* fs/splice.c */
#define __NR_vmsplice 75 #define __NR_vmsplice 75
__SC_COMP(__NR_vmsplice, sys_vmsplice, compat_sys_vmsplice) __SYSCALL(__NR_vmsplice, sys_vmsplice)
#define __NR_splice 76 #define __NR_splice 76
__SYSCALL(__NR_splice, sys_splice) __SYSCALL(__NR_splice, sys_splice)
#define __NR_tee 77 #define __NR_tee 77
......
...@@ -237,7 +237,7 @@ __SC_COMP(__NR_signalfd4, sys_signalfd4, compat_sys_signalfd4) ...@@ -237,7 +237,7 @@ __SC_COMP(__NR_signalfd4, sys_signalfd4, compat_sys_signalfd4)
/* fs/splice.c */ /* fs/splice.c */
#define __NR_vmsplice 75 #define __NR_vmsplice 75
__SC_COMP(__NR_vmsplice, sys_vmsplice, compat_sys_vmsplice) __SYSCALL(__NR_vmsplice, sys_vmsplice)
#define __NR_splice 76 #define __NR_splice 76
__SYSCALL(__NR_splice, sys_splice) __SYSCALL(__NR_splice, sys_splice)
#define __NR_tee 77 #define __NR_tee 77
......
...@@ -363,7 +363,7 @@ ...@@ -363,7 +363,7 @@
282 common unshare sys_unshare 282 common unshare sys_unshare
283 common splice sys_splice 283 common splice sys_splice
284 common tee sys_tee 284 common tee sys_tee
285 common vmsplice sys_vmsplice compat_sys_vmsplice 285 common vmsplice sys_vmsplice
286 common openat sys_openat compat_sys_openat 286 common openat sys_openat compat_sys_openat
287 common mkdirat sys_mkdirat 287 common mkdirat sys_mkdirat
288 common mknodat sys_mknodat 288 common mknodat sys_mknodat
......
...@@ -316,7 +316,7 @@ ...@@ -316,7 +316,7 @@
306 common splice sys_splice compat_sys_splice 306 common splice sys_splice compat_sys_splice
307 common sync_file_range sys_sync_file_range compat_sys_s390_sync_file_range 307 common sync_file_range sys_sync_file_range compat_sys_s390_sync_file_range
308 common tee sys_tee compat_sys_tee 308 common tee sys_tee compat_sys_tee
309 common vmsplice sys_vmsplice compat_sys_vmsplice 309 common vmsplice sys_vmsplice sys_vmsplice
310 common move_pages sys_move_pages compat_sys_move_pages 310 common move_pages sys_move_pages compat_sys_move_pages
311 common getcpu sys_getcpu compat_sys_getcpu 311 common getcpu sys_getcpu compat_sys_getcpu
312 common epoll_pwait sys_epoll_pwait compat_sys_epoll_pwait 312 common epoll_pwait sys_epoll_pwait compat_sys_epoll_pwait
......
...@@ -388,7 +388,7 @@ ...@@ -388,7 +388,7 @@
529 x32 waitid compat_sys_waitid 529 x32 waitid compat_sys_waitid
530 x32 set_robust_list compat_sys_set_robust_list 530 x32 set_robust_list compat_sys_set_robust_list
531 x32 get_robust_list compat_sys_get_robust_list 531 x32 get_robust_list compat_sys_get_robust_list
532 x32 vmsplice compat_sys_vmsplice 532 x32 vmsplice sys_vmsplice
533 x32 move_pages compat_sys_move_pages 533 x32 move_pages compat_sys_move_pages
534 x32 preadv compat_sys_preadv64 534 x32 preadv compat_sys_preadv64
535 x32 pwritev compat_sys_pwritev64 535 x32 pwritev compat_sys_pwritev64
......
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