Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs

+13 -18
+2 -3
drivers/target/iscsi/iscsi_target_util.c
··· 1283 1283 iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, 1284 1284 count->iov, count->iov_count, data); 1285 1285 1286 - while (total_rx < data) { 1287 - rx_loop = sock_recvmsg(conn->sock, &msg, 1288 - (data - total_rx), MSG_WAITALL); 1286 + while (msg_data_left(&msg)) { 1287 + rx_loop = sock_recvmsg(conn->sock, &msg, MSG_WAITALL); 1289 1288 if (rx_loop <= 0) { 1290 1289 pr_debug("rx_loop: %d total_rx: %d\n", 1291 1290 rx_loop, total_rx);
+1 -2
include/linux/net.h
··· 218 218 struct socket *sock_alloc(void); 219 219 void sock_release(struct socket *sock); 220 220 int sock_sendmsg(struct socket *sock, struct msghdr *msg); 221 - int sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t size, 222 - int flags); 221 + int sock_recvmsg(struct socket *sock, struct msghdr *msg, int flags); 223 222 struct file *sock_alloc_file(struct socket *sock, int flags, const char *dname); 224 223 struct socket *sockfd_lookup(int fd, int *err); 225 224 struct socket *sock_from_file(struct file *file, int *err);
+10 -13
net/socket.c
··· 709 709 EXPORT_SYMBOL_GPL(__sock_recv_ts_and_drops); 710 710 711 711 static inline int sock_recvmsg_nosec(struct socket *sock, struct msghdr *msg, 712 - size_t size, int flags) 712 + int flags) 713 713 { 714 - return sock->ops->recvmsg(sock, msg, size, flags); 714 + return sock->ops->recvmsg(sock, msg, msg_data_left(msg), flags); 715 715 } 716 716 717 - int sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t size, 718 - int flags) 717 + int sock_recvmsg(struct socket *sock, struct msghdr *msg, int flags) 719 718 { 720 - int err = security_socket_recvmsg(sock, msg, size, flags); 719 + int err = security_socket_recvmsg(sock, msg, msg_data_left(msg), flags); 721 720 722 - return err ?: sock_recvmsg_nosec(sock, msg, size, flags); 721 + return err ?: sock_recvmsg_nosec(sock, msg, flags); 723 722 } 724 723 EXPORT_SYMBOL(sock_recvmsg); 725 724 ··· 745 746 746 747 iov_iter_kvec(&msg->msg_iter, READ | ITER_KVEC, vec, num, size); 747 748 set_fs(KERNEL_DS); 748 - result = sock_recvmsg(sock, msg, size, flags); 749 + result = sock_recvmsg(sock, msg, flags); 749 750 set_fs(oldfs); 750 751 return result; 751 752 } ··· 795 796 if (!iov_iter_count(to)) /* Match SYS5 behaviour */ 796 797 return 0; 797 798 798 - res = sock_recvmsg(sock, &msg, iov_iter_count(to), msg.msg_flags); 799 + res = sock_recvmsg(sock, &msg, msg.msg_flags); 799 800 *to = msg.msg_iter; 800 801 return res; 801 802 } ··· 1695 1696 msg.msg_iocb = NULL; 1696 1697 if (sock->file->f_flags & O_NONBLOCK) 1697 1698 flags |= MSG_DONTWAIT; 1698 - err = sock_recvmsg(sock, &msg, iov_iter_count(&msg.msg_iter), flags); 1699 + err = sock_recvmsg(sock, &msg, flags); 1699 1700 1700 1701 if (err >= 0 && addr != NULL) { 1701 1702 err2 = move_addr_to_user(&address, ··· 2072 2073 struct iovec iovstack[UIO_FASTIOV]; 2073 2074 struct iovec *iov = iovstack; 2074 2075 unsigned long cmsg_ptr; 2075 - int total_len, len; 2076 + int len; 2076 2077 ssize_t err; 2077 2078 2078 2079 /* kernel mode address */ ··· 2090 2091 err = copy_msghdr_from_user(msg_sys, msg, &uaddr, &iov); 2091 2092 if (err < 0) 2092 2093 return err; 2093 - total_len = iov_iter_count(&msg_sys->msg_iter); 2094 2094 2095 2095 cmsg_ptr = (unsigned long)msg_sys->msg_control; 2096 2096 msg_sys->msg_flags = flags & (MSG_CMSG_CLOEXEC|MSG_CMSG_COMPAT); ··· 2099 2101 2100 2102 if (sock->file->f_flags & O_NONBLOCK) 2101 2103 flags |= MSG_DONTWAIT; 2102 - err = (nosec ? sock_recvmsg_nosec : sock_recvmsg)(sock, msg_sys, 2103 - total_len, flags); 2104 + err = (nosec ? sock_recvmsg_nosec : sock_recvmsg)(sock, msg_sys, flags); 2104 2105 if (err < 0) 2105 2106 goto out_freeiov; 2106 2107 len = err;