diff options
Diffstat (limited to 'net/socket.c')
-rw-r--r-- | net/socket.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/net/socket.c b/net/socket.c index 01f3f8f32d6f..fae408abea54 100644 --- a/net/socket.c +++ b/net/socket.c | |||
@@ -635,7 +635,7 @@ EXPORT_SYMBOL(sock_sendmsg); | |||
635 | int kernel_sendmsg(struct socket *sock, struct msghdr *msg, | 635 | int kernel_sendmsg(struct socket *sock, struct msghdr *msg, |
636 | struct kvec *vec, size_t num, size_t size) | 636 | struct kvec *vec, size_t num, size_t size) |
637 | { | 637 | { |
638 | iov_iter_kvec(&msg->msg_iter, WRITE | ITER_KVEC, vec, num, size); | 638 | iov_iter_kvec(&msg->msg_iter, WRITE, vec, num, size); |
639 | return sock_sendmsg(sock, msg); | 639 | return sock_sendmsg(sock, msg); |
640 | } | 640 | } |
641 | EXPORT_SYMBOL(kernel_sendmsg); | 641 | EXPORT_SYMBOL(kernel_sendmsg); |
@@ -648,7 +648,7 @@ int kernel_sendmsg_locked(struct sock *sk, struct msghdr *msg, | |||
648 | if (!sock->ops->sendmsg_locked) | 648 | if (!sock->ops->sendmsg_locked) |
649 | return sock_no_sendmsg_locked(sk, msg, size); | 649 | return sock_no_sendmsg_locked(sk, msg, size); |
650 | 650 | ||
651 | iov_iter_kvec(&msg->msg_iter, WRITE | ITER_KVEC, vec, num, size); | 651 | iov_iter_kvec(&msg->msg_iter, WRITE, vec, num, size); |
652 | 652 | ||
653 | return sock->ops->sendmsg_locked(sk, msg, msg_data_left(msg)); | 653 | return sock->ops->sendmsg_locked(sk, msg, msg_data_left(msg)); |
654 | } | 654 | } |
@@ -823,7 +823,7 @@ int kernel_recvmsg(struct socket *sock, struct msghdr *msg, | |||
823 | mm_segment_t oldfs = get_fs(); | 823 | mm_segment_t oldfs = get_fs(); |
824 | int result; | 824 | int result; |
825 | 825 | ||
826 | iov_iter_kvec(&msg->msg_iter, READ | ITER_KVEC, vec, num, size); | 826 | iov_iter_kvec(&msg->msg_iter, READ, vec, num, size); |
827 | set_fs(KERNEL_DS); | 827 | set_fs(KERNEL_DS); |
828 | result = sock_recvmsg(sock, msg, flags); | 828 | result = sock_recvmsg(sock, msg, flags); |
829 | set_fs(oldfs); | 829 | set_fs(oldfs); |
@@ -1475,7 +1475,7 @@ int __sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen) | |||
1475 | sock = sockfd_lookup_light(fd, &err, &fput_needed); | 1475 | sock = sockfd_lookup_light(fd, &err, &fput_needed); |
1476 | if (sock) { | 1476 | if (sock) { |
1477 | err = move_addr_to_kernel(umyaddr, addrlen, &address); | 1477 | err = move_addr_to_kernel(umyaddr, addrlen, &address); |
1478 | if (err >= 0) { | 1478 | if (!err) { |
1479 | err = security_socket_bind(sock, | 1479 | err = security_socket_bind(sock, |
1480 | (struct sockaddr *)&address, | 1480 | (struct sockaddr *)&address, |
1481 | addrlen); | 1481 | addrlen); |
@@ -2875,9 +2875,14 @@ static int ethtool_ioctl(struct net *net, struct compat_ifreq __user *ifr32) | |||
2875 | copy_in_user(&rxnfc->fs.ring_cookie, | 2875 | copy_in_user(&rxnfc->fs.ring_cookie, |
2876 | &compat_rxnfc->fs.ring_cookie, | 2876 | &compat_rxnfc->fs.ring_cookie, |
2877 | (void __user *)(&rxnfc->fs.location + 1) - | 2877 | (void __user *)(&rxnfc->fs.location + 1) - |
2878 | (void __user *)&rxnfc->fs.ring_cookie) || | 2878 | (void __user *)&rxnfc->fs.ring_cookie)) |
2879 | copy_in_user(&rxnfc->rule_cnt, &compat_rxnfc->rule_cnt, | 2879 | return -EFAULT; |
2880 | sizeof(rxnfc->rule_cnt))) | 2880 | if (ethcmd == ETHTOOL_GRXCLSRLALL) { |
2881 | if (put_user(rule_cnt, &rxnfc->rule_cnt)) | ||
2882 | return -EFAULT; | ||
2883 | } else if (copy_in_user(&rxnfc->rule_cnt, | ||
2884 | &compat_rxnfc->rule_cnt, | ||
2885 | sizeof(rxnfc->rule_cnt))) | ||
2881 | return -EFAULT; | 2886 | return -EFAULT; |
2882 | } | 2887 | } |
2883 | 2888 | ||