Ignore:
Timestamp:
Apr 16, 2017, 10:20:02 AM (2 months ago)
Author:
brainslayer
Message:

backport udp checksum fix

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/linux/brcm/linux-2.6.23/net/ipv6/udp.c

    r12690 r31864  
    123123        unsigned int ulen, copied;
    124124        int err;
     125        bool checksum_valid = false;
    125126        int is_udplite = IS_UDPLITE(sk);
    126127
     
    150151
    151152        if (copied < ulen || UDP_SKB_CB(skb)->partial_cov) {
    152                 if (udp_lib_checksum_complete(skb))
     153                checksum_valid = !udp_lib_checksum_complete(skb);
     154                if (!checksum_valid)
    153155                        goto csum_copy_err;
    154156        }
    155157
    156         if (skb_csum_unnecessary(skb))
     158        if (checksum_valid || skb_csum_unnecessary(skb))
    157159                err = skb_copy_datagram_iovec(skb, sizeof(struct udphdr),
    158                                               msg->msg_iov, copied       );
     160                                              msg->msg_iov, copied);
    159161        else {
    160162                err = skb_copy_and_csum_datagram_iovec(skb, sizeof(struct udphdr), msg->msg_iov);
Note: See TracChangeset for help on using the changeset viewer.