mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal
Pull compat cleanup from Al Viro:
"Mostly about syscall wrappers this time; there will be another pile
with patches in the same general area from various people, but I'd
rather push those after both that and vfs.git pile are in."
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal:
syscalls.h: slightly reduce the jungles of macros
get rid of union semop in sys_semctl(2) arguments
make do_mremap() static
sparc: no need to sign-extend in sync_file_range() wrapper
ppc compat wrappers for add_key(2) and request_key(2) are pointless
x86: trim sys_ia32.h
x86: sys32_kill and sys32_mprotect are pointless
get rid of compat_sys_semctl() and friends in case of ARCH_WANT_OLD_COMPAT_IPC
merge compat sys_ipc instances
consolidate compat lookup_dcookie()
convert vmsplice to COMPAT_SYSCALL_DEFINE
switch getrusage() to COMPAT_SYSCALL_DEFINE
switch epoll_pwait to COMPAT_SYSCALL_DEFINE
convert sendfile{,64} to COMPAT_SYSCALL_DEFINE
switch signalfd{,4}() to COMPAT_SYSCALL_DEFINE
make SYSCALL_DEFINE<n>-generated wrappers do asmlinkage_protect
make HAVE_SYSCALL_WRAPPERS unconditional
consolidate cond_syscall and SYSCALL_ALIAS declarations
teach SYSCALL_DEFINE<n> how to deal with long long/unsigned long long
get rid of duplicate logics in __SC_....[1-6] definitions
This commit is contained in:
commit
08d7676083
87 changed files with 539 additions and 1489 deletions
22
fs/splice.c
22
fs/splice.c
|
|
@ -31,6 +31,7 @@
|
|||
#include <linux/security.h>
|
||||
#include <linux/gfp.h>
|
||||
#include <linux/socket.h>
|
||||
#include <linux/compat.h>
|
||||
#include "internal.h"
|
||||
|
||||
/*
|
||||
|
|
@ -1690,6 +1691,27 @@ SYSCALL_DEFINE4(vmsplice, int, fd, const struct iovec __user *, iov,
|
|||
return error;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
COMPAT_SYSCALL_DEFINE4(vmsplice, int, fd, const struct compat_iovec __user *, iov32,
|
||||
unsigned int, nr_segs, unsigned int, flags)
|
||||
{
|
||||
unsigned i;
|
||||
struct iovec __user *iov;
|
||||
if (nr_segs > UIO_MAXIOV)
|
||||
return -EINVAL;
|
||||
iov = compat_alloc_user_space(nr_segs * sizeof(struct iovec));
|
||||
for (i = 0; i < nr_segs; i++) {
|
||||
struct compat_iovec v;
|
||||
if (get_user(v.iov_base, &iov32[i].iov_base) ||
|
||||
get_user(v.iov_len, &iov32[i].iov_len) ||
|
||||
put_user(compat_ptr(v.iov_base), &iov[i].iov_base) ||
|
||||
put_user(v.iov_len, &iov[i].iov_len))
|
||||
return -EFAULT;
|
||||
}
|
||||
return sys_vmsplice(fd, iov, nr_segs, flags);
|
||||
}
|
||||
#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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue