]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
make skb_add_data,{_nocache}() and skb_copy_to_page_nocache() advance only on success
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 2 Nov 2016 02:42:45 +0000 (22:42 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 5 Dec 2016 19:34:30 +0000 (14:34 -0500)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
include/linux/skbuff.h
include/net/sock.h

index 32810f279f8e4f097d678fb3bb587254f42d7a00..9cfae2e73b3c30a33aa50235605b16af38693d84 100644 (file)
@@ -2809,12 +2809,12 @@ static inline int skb_add_data(struct sk_buff *skb,
 
        if (skb->ip_summed == CHECKSUM_NONE) {
                __wsum csum = 0;
-               if (csum_and_copy_from_iter(skb_put(skb, copy), copy,
-                                           &csum, from) == copy) {
+               if (csum_and_copy_from_iter_full(skb_put(skb, copy), copy,
+                                                &csum, from)) {
                        skb->csum = csum_block_add(skb->csum, csum, off);
                        return 0;
                }
-       } else if (copy_from_iter(skb_put(skb, copy), copy, from) == copy)
+       } else if (copy_from_iter_full(skb_put(skb, copy), copy, from))
                return 0;
 
        __skb_trim(skb, off);
index 92b269709b9a8a7e5d69c55ac66b834501a2931c..5dd0fed82a06333f8940aba756d26a6e90566397 100644 (file)
@@ -1783,13 +1783,13 @@ static inline int skb_do_copy_data_nocache(struct sock *sk, struct sk_buff *skb,
 {
        if (skb->ip_summed == CHECKSUM_NONE) {
                __wsum csum = 0;
-               if (csum_and_copy_from_iter(to, copy, &csum, from) != copy)
+               if (!csum_and_copy_from_iter_full(to, copy, &csum, from))
                        return -EFAULT;
                skb->csum = csum_block_add(skb->csum, csum, offset);
        } else if (sk->sk_route_caps & NETIF_F_NOCACHE_COPY) {
-               if (copy_from_iter_nocache(to, copy, from) != copy)
+               if (!copy_from_iter_full_nocache(to, copy, from))
                        return -EFAULT;
-       } else if (copy_from_iter(to, copy, from) != copy)
+       } else if (!copy_from_iter_full(to, copy, from))
                return -EFAULT;
 
        return 0;