Changeset 31863


Ignore:
Timestamp:
Apr 16, 2017, 10:17:54 AM (4 months ago)
Author:
brainslayer
Message:

backport udp checksum fix

Location:
src/linux/universal/linux-3.5/net
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/linux/universal/linux-3.5/net/ipv4/udp.c

    r23296 r31863  
    11871187        int err;
    11881188        int is_udplite = IS_UDPLITE(sk);
     1189        bool checksum_valid = false;
    11891190        bool slow;
    11901191
     
    12121213
    12131214        if (copied < ulen || UDP_SKB_CB(skb)->partial_cov) {
    1214                 if (udp_lib_checksum_complete(skb))
     1215                checksum_valid = !udp_lib_checksum_complete(skb);
     1216                if (!checksum_valid)
    12151217                        goto csum_copy_err;
    12161218        }
  • src/linux/universal/linux-3.5/net/ipv6/udp.c

    r23296 r31863  
    346346        int err;
    347347        int is_udplite = IS_UDPLITE(sk);
     348        bool checksum_valid = false;
    348349        int is_udp4;
    349350        bool slow;
     
    377378
    378379        if (copied < ulen || UDP_SKB_CB(skb)->partial_cov) {
    379                 if (udp_lib_checksum_complete(skb))
     380                checksum_valid = !udp_lib_checksum_complete(skb);
     381                if (!checksum_valid)
    380382                        goto csum_copy_err;
    381383        }
    382384
    383         if (skb_csum_unnecessary(skb))
     385        if (checksum_valid || skb_csum_unnecessary(skb))
    384386                err = skb_copy_datagram_iovec(skb, sizeof(struct udphdr),
    385                                               msg->msg_iov, copied       );
     387                                              msg->msg_iov, copied);
    386388        else {
    387389                err = skb_copy_and_csum_datagram_iovec(skb, sizeof(struct udphdr), msg->msg_iov);
Note: See TracChangeset for help on using the changeset viewer.