]> git.hungrycats.org Git - linux/commitdiff
Revert "net: add length argument to skb_copy_and_csum_datagram_iovec"
authorWilly Tarreau <w@1wt.eu>
Sat, 23 Jan 2016 10:16:20 +0000 (11:16 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 29 Jan 2016 21:12:40 +0000 (22:12 +0100)
This reverts commit c507639ba963bb47e3f515670a7cace76af76ab6.
As reported by Michal Kubecek, this fix doesn't handle truncated
reads correctly. Next patch from Eric fixes it better.

Signed-off-by: Willy Tarreau <w@1wt.eu>
include/linux/skbuff.h
net/core/datagram.c
net/ipv4/tcp_input.c
net/ipv4/udp.c
net/ipv6/raw.c
net/ipv6/udp.c
net/rxrpc/ar-recvmsg.c

index c282a2cba635f8330a915ae2ece2f44bc26afcc3..ae77862160ba4eeb3b9f1bc96b1db6d61700283c 100644 (file)
@@ -1765,8 +1765,7 @@ extern int               skb_copy_datagram_iovec(const struct sk_buff *from,
                                               int size);
 extern int            skb_copy_and_csum_datagram_iovec(struct sk_buff *skb,
                                                        int hlen,
-                                                       struct iovec *iov,
-                                                       int len);
+                                                       struct iovec *iov);
 extern int            skb_copy_datagram_from_iovec(struct sk_buff *skb,
                                                    int offset,
                                                    const struct iovec *from,
index 767c17aaddcb766715d376a99e9829d1ad68cf13..253d068e8cbac54be240f5d603b9466e3a6c3b84 100644 (file)
@@ -693,7 +693,6 @@ EXPORT_SYMBOL(__skb_checksum_complete);
  *     @skb: skbuff
  *     @hlen: hardware length
  *     @iov: io vector
- *     @len: amount of data to copy from skb to iov
  *
  *     Caller _must_ check that skb will fit to this iovec.
  *
@@ -703,14 +702,11 @@ EXPORT_SYMBOL(__skb_checksum_complete);
  *                        can be modified!
  */
 int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb,
-                                    int hlen, struct iovec *iov, int len)
+                                    int hlen, struct iovec *iov)
 {
        __wsum csum;
        int chunk = skb->len - hlen;
 
-       if (chunk > len)
-               chunk = len;
-
        if (!chunk)
                return 0;
 
index d3dcfb9d736f5348f3c03baf74dfa9cb0d4b5c49..c821218b3834caa04c664ed0b79c9d3e1a6527eb 100644 (file)
@@ -4985,7 +4985,7 @@ static int tcp_copy_to_iovec(struct sock *sk, struct sk_buff *skb, int hlen)
                err = skb_copy_datagram_iovec(skb, hlen, tp->ucopy.iov, chunk);
        else
                err = skb_copy_and_csum_datagram_iovec(skb, hlen,
-                                                      tp->ucopy.iov, chunk);
+                                                      tp->ucopy.iov);
 
        if (!err) {
                tp->ucopy.len -= chunk;
index 83b507d51968f5a0482b3d15c1682d151e0bbb6e..3ae286b9c5ab1ffd5e09f00b075401237126b032 100644 (file)
@@ -975,7 +975,7 @@ try_again:
        else {
                err = skb_copy_and_csum_datagram_iovec(skb,
                                                       sizeof(struct udphdr),
-                                                      msg->msg_iov, copied);
+                                                      msg->msg_iov);
 
                if (err == -EINVAL)
                        goto csum_copy_err;
index f016542cf8496dca402b5a55a274f042b8f22a18..d5b09c7ca4020ff4109eb3412c7170ad90c6096b 100644 (file)
@@ -476,7 +476,7 @@ static int rawv6_recvmsg(struct kiocb *iocb, struct sock *sk,
                        goto csum_copy_err;
                err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
        } else {
-               err = skb_copy_and_csum_datagram_iovec(skb, 0, msg->msg_iov, copied);
+               err = skb_copy_and_csum_datagram_iovec(skb, 0, msg->msg_iov);
                if (err == -EINVAL)
                        goto csum_copy_err;
        }
index 5c8bd19c9572dfedbb554ce44c30c4aa27a74829..0b023f35103dc6affa95ec34ba44daf0e3ee9c02 100644 (file)
@@ -233,8 +233,7 @@ try_again:
                err = skb_copy_datagram_iovec(skb, sizeof(struct udphdr),
                                              msg->msg_iov, copied       );
        else {
-               err = skb_copy_and_csum_datagram_iovec(skb, sizeof(struct udphdr),
-                                                      msg->msg_iov, copied);
+               err = skb_copy_and_csum_datagram_iovec(skb, sizeof(struct udphdr), msg->msg_iov);
                if (err == -EINVAL)
                        goto csum_copy_err;
        }
index 813e1c482e32a00b8ae61e2973ec2b73f6517947..b6076b231b492243f28f8a08741d27b6c19ffa65 100644 (file)
@@ -184,8 +184,7 @@ int rxrpc_recvmsg(struct kiocb *iocb, struct socket *sock,
                                                      msg->msg_iov, copy);
                } else {
                        ret = skb_copy_and_csum_datagram_iovec(skb, offset,
-                                                              msg->msg_iov,
-                                                              copy);
+                                                              msg->msg_iov);
                        if (ret == -EINVAL)
                                goto csum_copy_error;
                }