forked from luck/tmp_suning_uos_patched
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: Christoph Hellwig <hch@lst.de> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
5f764d624a
commit
598b3cec83
|
@ -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
|
||||
|
|
|
@ -278,7 +278,7 @@
|
|||
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
|
||||
|
|
|
@ -318,7 +318,7 @@
|
|||
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
|
||||
|
|
|
@ -330,7 +330,7 @@
|
|||
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
|
||||
|
|
|
@ -369,7 +369,7 @@
|
|||
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
|
||||
|
|
|
@ -316,7 +316,7 @@
|
|||
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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -327,7 +327,7 @@
|
|||
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
|
||||
|
|
|
@ -388,7 +388,7 @@
|
|||
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
|
||||
|
|
61
fs/splice.c
61
fs/splice.c
|
@ -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,41 +1351,22 @@ 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);
|
||||
}
|
||||
if (error < 0)
|
||||
goto out_fdput;
|
||||
|
||||
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);
|
||||
|
||||
kfree(iov);
|
||||
out_fdput:
|
||||
fdput(f);
|
||||
return error;
|
||||
}
|
||||
|
||||
#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;
|
||||
|
||||
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);
|
||||
}
|
||||
fdput(f);
|
||||
return error;
|
||||
}
|
||||
#endif
|
||||
|
||||
SYSCALL_DEFINE6(splice, int, fd_in, loff_t __user *, off_in,
|
||||
int, fd_out, loff_t __user *, off_out,
|
||||
size_t, len, unsigned int, flags)
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -363,7 +363,7 @@
|
|||
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
|
||||
|
|
|
@ -316,7 +316,7 @@
|
|||
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
|
||||
|
|
|
@ -388,7 +388,7 @@
|
|||
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
|
||||
|
|
Loading…
Reference in New Issue
Block a user