|
@@ -753,18 +753,25 @@ COMPAT_SYSCALL_DEFINE3(recvmsg, int, fd, struct compat_msghdr __user *, msg, uns
|
|
|
flags | MSG_CMSG_COMPAT, false);
|
|
|
}
|
|
|
|
|
|
+static inline long __compat_sys_recvfrom(int fd, void __user *buf,
|
|
|
+ compat_size_t len, unsigned int flags,
|
|
|
+ struct sockaddr __user *addr,
|
|
|
+ int __user *addrlen)
|
|
|
+{
|
|
|
+ return __sys_recvfrom(fd, buf, len, flags | MSG_CMSG_COMPAT, addr,
|
|
|
+ addrlen);
|
|
|
+}
|
|
|
+
|
|
|
COMPAT_SYSCALL_DEFINE4(recv, int, fd, void __user *, buf, compat_size_t, len, unsigned int, flags)
|
|
|
{
|
|
|
- return __sys_recvfrom(fd, buf, len, flags | MSG_CMSG_COMPAT, NULL,
|
|
|
- NULL);
|
|
|
+ return __compat_sys_recvfrom(fd, buf, len, flags, NULL, NULL);
|
|
|
}
|
|
|
|
|
|
COMPAT_SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, buf, compat_size_t, len,
|
|
|
unsigned int, flags, struct sockaddr __user *, addr,
|
|
|
int __user *, addrlen)
|
|
|
{
|
|
|
- return __sys_recvfrom(fd, buf, len, flags | MSG_CMSG_COMPAT, addr,
|
|
|
- addrlen);
|
|
|
+ return __compat_sys_recvfrom(fd, buf, len, flags, addr, addrlen);
|
|
|
}
|
|
|
|
|
|
COMPAT_SYSCALL_DEFINE5(recvmmsg, int, fd, struct compat_mmsghdr __user *, mmsg,
|
|
@@ -845,11 +852,13 @@ COMPAT_SYSCALL_DEFINE2(socketcall, int, call, u32 __user *, args)
|
|
|
compat_ptr(a[4]), a[5]);
|
|
|
break;
|
|
|
case SYS_RECV:
|
|
|
- ret = compat_sys_recv(a0, compat_ptr(a1), a[2], a[3]);
|
|
|
+ ret = __compat_sys_recvfrom(a0, compat_ptr(a1), a[2], a[3],
|
|
|
+ NULL, NULL);
|
|
|
break;
|
|
|
case SYS_RECVFROM:
|
|
|
- ret = compat_sys_recvfrom(a0, compat_ptr(a1), a[2], a[3],
|
|
|
- compat_ptr(a[4]), compat_ptr(a[5]));
|
|
|
+ ret = __compat_sys_recvfrom(a0, compat_ptr(a1), a[2], a[3],
|
|
|
+ compat_ptr(a[4]),
|
|
|
+ compat_ptr(a[5]));
|
|
|
break;
|
|
|
case SYS_SHUTDOWN:
|
|
|
ret = __sys_shutdown(a0, a1);
|