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:
Родитель
5f764d624a
Коммит
598b3cec83
|
@ -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 @@
|
||||||
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 @@
|
||||||
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 @@
|
||||||
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 @@
|
||||||
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 @@
|
||||||
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 @@
|
||||||
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 @@
|
||||||
#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 @@
|
||||||
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 @@
|
||||||
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
|
||||||
|
|
61
fs/splice.c
61
fs/splice.c
|
@ -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)
|
||||||
* 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,
|
||||||
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,41 +1351,22 @@ 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);
|
|
||||||
}
|
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);
|
fdput(f);
|
||||||
return error;
|
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,
|
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,
|
||||||
size_t, len, unsigned int, flags)
|
size_t, len, unsigned int, flags)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
/* 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)
|
||||||
|
|
||||||
/* 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 @@
|
||||||
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 @@
|
||||||
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 @@
|
||||||
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
|
||||||
|
|
Загрузка…
Ссылка в новой задаче