aboutsummaryrefslogtreecommitdiffstats
path: root/net/socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/socket.c')
-rw-r--r--net/socket.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/net/socket.c b/net/socket.c
index 5247ae10f374..088fb3fd45e0 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -732,6 +732,21 @@ static int sock_recvmsg_nosec(struct socket *sock, struct msghdr *msg,
732 return ret; 732 return ret;
733} 733}
734 734
735/**
736 * kernel_recvmsg - Receive a message from a socket (kernel space)
737 * @sock: The socket to receive the message from
738 * @msg: Received message
739 * @vec: Input s/g array for message data
740 * @num: Size of input s/g array
741 * @size: Number of bytes to read
742 * @flags: Message flags (MSG_DONTWAIT, etc...)
743 *
744 * On return the msg structure contains the scatter/gather array passed in the
745 * vec argument. The array is modified so that it consists of the unfilled
746 * portion of the original array.
747 *
748 * The returned value is the total number of bytes received, or an error.
749 */
735int kernel_recvmsg(struct socket *sock, struct msghdr *msg, 750int kernel_recvmsg(struct socket *sock, struct msghdr *msg,
736 struct kvec *vec, size_t num, size_t size, int flags) 751 struct kvec *vec, size_t num, size_t size, int flags)
737{ 752{
@@ -1652,6 +1667,8 @@ SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len,
1652 struct iovec iov; 1667 struct iovec iov;
1653 int fput_needed; 1668 int fput_needed;
1654 1669
1670 if (len > INT_MAX)
1671 len = INT_MAX;
1655 sock = sockfd_lookup_light(fd, &err, &fput_needed); 1672 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1656 if (!sock) 1673 if (!sock)
1657 goto out; 1674 goto out;
@@ -1709,6 +1726,8 @@ SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size,
1709 int err, err2; 1726 int err, err2;
1710 int fput_needed; 1727 int fput_needed;
1711 1728
1729 if (size > INT_MAX)
1730 size = INT_MAX;
1712 sock = sockfd_lookup_light(fd, &err, &fput_needed); 1731 sock = sockfd_lookup_light(fd, &err, &fput_needed);
1713 if (!sock) 1732 if (!sock)
1714 goto out; 1733 goto out;