fs: remove compat_sys_vmsplice
authorChristoph Hellwig <hch@lst.de>
Fri, 25 Sep 2020 04:51:44 +0000 (06:51 +0200)
committerAl Viro <viro@zeniv.linux.org.uk>
Sat, 3 Oct 2020 04:02:15 +0000 (00:02 -0400)
Now that import_iovec handles compat iovecs, the native vmsplice syscall
can be used for the compat case as well.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
17 files changed:
arch/arm64/include/asm/unistd32.h
arch/mips/kernel/syscalls/syscall_n32.tbl
arch/mips/kernel/syscalls/syscall_o32.tbl
arch/parisc/kernel/syscalls/syscall.tbl
arch/powerpc/kernel/syscalls/syscall.tbl
arch/s390/kernel/syscalls/syscall.tbl
arch/sparc/kernel/syscalls/syscall.tbl
arch/x86/entry/syscall_x32.c
arch/x86/entry/syscalls/syscall_32.tbl
arch/x86/entry/syscalls/syscall_64.tbl
fs/splice.c
include/linux/compat.h
include/uapi/asm-generic/unistd.h
tools/include/uapi/asm-generic/unistd.h
tools/perf/arch/powerpc/entry/syscalls/syscall.tbl
tools/perf/arch/s390/entry/syscalls/syscall.tbl
tools/perf/arch/x86/entry/syscalls/syscall_64.tbl

index 4a23649..11dfae3 100644 (file)
@@ -697,7 +697,7 @@ __SYSCALL(__NR_sync_file_range2, compat_sys_aarch32_sync_file_range2)
 #define __NR_tee 342
 __SYSCALL(__NR_tee, sys_tee)
 #define __NR_vmsplice 343
-__SYSCALL(__NR_vmsplice, compat_sys_vmsplice)
+__SYSCALL(__NR_vmsplice, sys_vmsplice)
 #define __NR_move_pages 344
 __SYSCALL(__NR_move_pages, compat_sys_move_pages)
 #define __NR_getcpu 345
index c99a926..5a39d4d 100644 (file)
 267    n32     splice                          sys_splice
 268    n32     sync_file_range                 sys_sync_file_range
 269    n32     tee                             sys_tee
-270    n32     vmsplice                        compat_sys_vmsplice
+270    n32     vmsplice                        sys_vmsplice
 271    n32     move_pages                      compat_sys_move_pages
 272    n32     set_robust_list                 compat_sys_set_robust_list
 273    n32     get_robust_list                 compat_sys_get_robust_list
index 075064d..136efc6 100644 (file)
 304    o32     splice                          sys_splice
 305    o32     sync_file_range                 sys_sync_file_range             sys32_sync_file_range
 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
 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
index 192abde..a9e1841 100644 (file)
 292    32      sync_file_range         parisc_sync_file_range
 292    64      sync_file_range         sys_sync_file_range
 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
 296    common  getcpu                  sys_getcpu
 297    common  epoll_pwait             sys_epoll_pwait                 compat_sys_epoll_pwait
index 6f1e2ec..0d49859 100644 (file)
 282    common  unshare                         sys_unshare
 283    common  splice                          sys_splice
 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
 287    common  mkdirat                         sys_mkdirat
 288    common  mknodat                         sys_mknodat
index 6101cf2..b5495a4 100644 (file)
 306  common    splice                  sys_splice                      sys_splice
 307  common    sync_file_range         sys_sync_file_range             compat_sys_s390_sync_file_range
 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
 311  common    getcpu                  sys_getcpu                      sys_getcpu
 312  common    epoll_pwait             sys_epoll_pwait                 compat_sys_epoll_pwait
index a87ddb2..f1810c1 100644 (file)
@@ -38,7 +38,7 @@
 23     64      setuid                  sys_setuid
 24     32      getuid                  sys_getuid16
 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
 27     common  alarm                   sys_alarm
 28     common  sigaltstack             sys_sigaltstack                 compat_sys_sigaltstack
index aa32144..a4840b9 100644 (file)
@@ -16,6 +16,7 @@
 #define __x32_sys_writev       __x64_sys_writev
 #define __x32_sys_getsockopt   __x64_sys_getsockopt
 #define __x32_sys_setsockopt   __x64_sys_setsockopt
+#define __x32_sys_vmsplice     __x64_sys_vmsplice
 
 #define __SYSCALL_64(nr, sym)
 
index 54ab4be..0fb2f17 100644 (file)
 313    i386    splice                  sys_splice
 314    i386    sync_file_range         sys_ia32_sync_file_range
 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
 318    i386    getcpu                  sys_getcpu
 319    i386    epoll_pwait             sys_epoll_pwait
index b1e5995..642af91 100644 (file)
 529    x32     waitid                  compat_sys_waitid
 530    x32     set_robust_list         compat_sys_set_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
 534    x32     preadv                  compat_sys_preadv64
 535    x32     pwritev                 compat_sys_pwritev64
index 132d42b..18d8454 100644 (file)
@@ -33,7 +33,6 @@
 #include <linux/security.h>
 #include <linux/gfp.h>
 #include <linux/socket.h>
-#include <linux/compat.h>
 #include <linux/sched/signal.h>
 
 #include "internal.h"
@@ -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().
  *
  */
-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,
                unsigned long, nr_segs, unsigned int, flags)
 {
@@ -1356,6 +1341,9 @@ SYSCALL_DEFINE4(vmsplice, int, fd, const struct iovec __user *, uiov,
        struct fd f;
        int type;
 
+       if (unlikely(flags & ~SPLICE_F_ALL))
+               return -EINVAL;
+
        f = fdget(fd);
        error = vmsplice_type(f, &type);
        if (error)
@@ -1363,40 +1351,21 @@ SYSCALL_DEFINE4(vmsplice, int, fd, const struct iovec __user *, uiov,
 
        error = import_iovec(type, uiov, nr_segs,
                             ARRAY_SIZE(iovstack), &iov, &iter);
-       if (error >= 0) {
-               error = do_vmsplice(f.file, &iter, flags);
-               kfree(iov);
-       }
-       fdput(f);
-       return error;
-}
+       if (error < 0)
+               goto out_fdput;
 
-#ifdef CONFIG_COMPAT
-COMPAT_SYSCALL_DEFINE4(vmsplice, int, fd, const struct compat_iovec __user *, iov32,
-                   unsigned int, nr_segs, unsigned int, flags)
-{
-       struct iovec iovstack[UIO_FASTIOV];
-       struct iovec *iov = iovstack;
-       struct iov_iter iter;
-       ssize_t error;
-       struct fd f;
-       int type;
-
-       f = fdget(fd);
-       error = vmsplice_type(f, &type);
-       if (error)
-               return error;
+       if (!iov_iter_count(&iter))
+               error = 0;
+       else if (iov_iter_rw(&iter) == WRITE)
+               error = vmsplice_to_pipe(f.file, &iter, flags);
+       else
+               error = vmsplice_to_user(f.file, &iter, flags);
 
-       error = import_iovec(type, (struct iovec __user *)iov32, nr_segs,
-                            ARRAY_SIZE(iovstack), &iov, &iter);
-       if (error >= 0) {
-               error = do_vmsplice(f.file, &iter, flags);
-               kfree(iov);
-       }
+       kfree(iov);
+out_fdput:
        fdput(f);
        return error;
 }
-#endif
 
 SYSCALL_DEFINE6(splice, int, fd_in, loff_t __user *, off_in,
                int, fd_out, loff_t __user *, off_out,
index 07268fc..7c3e876 100644 (file)
@@ -597,10 +597,6 @@ asmlinkage long compat_sys_signalfd4(int ufd,
                                     const compat_sigset_t __user *sigmask,
                                     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 */
 asmlinkage long compat_sys_newfstatat(unsigned int dfd,
                                      const char __user *filename,
index 211c9ea..f2dcb0d 100644 (file)
@@ -237,7 +237,7 @@ __SC_COMP(__NR_signalfd4, sys_signalfd4, compat_sys_signalfd4)
 
 /* fs/splice.c */
 #define __NR_vmsplice 75
-__SC_COMP(__NR_vmsplice, sys_vmsplice, compat_sys_vmsplice)
+__SYSCALL(__NR_vmsplice, sys_vmsplice)
 #define __NR_splice 76
 __SYSCALL(__NR_splice, sys_splice)
 #define __NR_tee 77
index 211c9ea..f2dcb0d 100644 (file)
@@ -237,7 +237,7 @@ __SC_COMP(__NR_signalfd4, sys_signalfd4, compat_sys_signalfd4)
 
 /* fs/splice.c */
 #define __NR_vmsplice 75
-__SC_COMP(__NR_vmsplice, sys_vmsplice, compat_sys_vmsplice)
+__SYSCALL(__NR_vmsplice, sys_vmsplice)
 #define __NR_splice 76
 __SYSCALL(__NR_splice, sys_splice)
 #define __NR_tee 77
index 46be680..26f0347 100644 (file)
 282    common  unshare                         sys_unshare
 283    common  splice                          sys_splice
 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
 287    common  mkdirat                         sys_mkdirat
 288    common  mknodat                         sys_mknodat
index fb5e61c..02ad81f 100644 (file)
 306  common    splice                  sys_splice                      compat_sys_splice
 307  common    sync_file_range         sys_sync_file_range             compat_sys_s390_sync_file_range
 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
 311  common    getcpu                  sys_getcpu                      compat_sys_getcpu
 312  common    epoll_pwait             sys_epoll_pwait                 compat_sys_epoll_pwait
index b1e5995..642af91 100644 (file)
 529    x32     waitid                  compat_sys_waitid
 530    x32     set_robust_list         compat_sys_set_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
 534    x32     preadv                  compat_sys_preadv64
 535    x32     pwritev                 compat_sys_pwritev64