Ignore:
Timestamp:
Apr 21, 2017, 4:28:29 AM (3 months ago)
Author:
brainslayer
Message:

update

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/linux/universal/linux-4.9/net/core/datagram.c

    r31574 r31885  
    379379{
    380380        int start = skb_headlen(skb);
    381         int i, copy = start - offset;
     381        int i, copy = start - offset, start_off = offset, n;
    382382        struct sk_buff *frag_iter;
    383383
     
    388388                if (copy > len)
    389389                        copy = len;
    390                 if (copy_to_iter(skb->data + offset, copy, to) != copy)
     390                n = copy_to_iter(skb->data + offset, copy, to);
     391                offset += n;
     392                if (n != copy)
    391393                        goto short_copy;
    392394                if ((len -= copy) == 0)
    393395                        return 0;
    394                 offset += copy;
    395396        }
    396397
     
    406407                        if (copy > len)
    407408                                copy = len;
    408                         if (copy_page_to_iter(skb_frag_page(frag),
     409                        n = copy_page_to_iter(skb_frag_page(frag),
    409410                                              frag->page_offset + offset -
    410                                               start, copy, to) != copy)
     411                                              start, copy, to);
     412                        offset += n;
     413                        if (n != copy)
    411414                                goto short_copy;
    412415                        if (!(len -= copy))
    413416                                return 0;
    414                         offset += copy;
    415417                }
    416418                start = end;
     
    444446
    445447fault:
     448        iov_iter_revert(to, offset - start_off);
    446449        return -EFAULT;
    447450
     
    594597{
    595598        int start = skb_headlen(skb);
    596         int i, copy = start - offset;
     599        int i, copy = start - offset, start_off = offset;
    597600        struct sk_buff *frag_iter;
    598601        int pos = 0;
     
    604607                        copy = len;
    605608                n = csum_and_copy_to_iter(skb->data + offset, copy, csump, to);
     609                offset += n;
    606610                if (n != copy)
    607611                        goto fault;
    608612                if ((len -= copy) == 0)
    609613                        return 0;
    610                 offset += copy;
    611614                pos = copy;
    612615        }
     
    630633                                                  &csum2, to);
    631634                        kunmap(page);
     635                        offset += n;
    632636                        if (n != copy)
    633637                                goto fault;
     
    635639                        if (!(len -= copy))
    636640                                return 0;
    637                         offset += copy;
    638641                        pos += copy;
    639642                }
     
    668671
    669672fault:
     673        iov_iter_revert(to, offset - start_off);
    670674        return -EFAULT;
    671675}
     
    752756        return 0;
    753757csum_error:
     758        iov_iter_revert(&msg->msg_iter, chunk);
    754759        return -EINVAL;
    755760fault:
Note: See TracChangeset for help on using the changeset viewer.