Changeset 31865


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

backport udp checksum fix

Location:
src/linux/adm5120/linux-2.6.23/net
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/linux/adm5120/linux-2.6.23/net/ipv4/udp.c

    r10172 r31865  
    819819        unsigned int ulen, copied;
    820820        int err;
     821        bool checksum_valid = false;
    821822        int is_udplite = IS_UDPLITE(sk);
    822823
     
    849850
    850851        if (copied < ulen || UDP_SKB_CB(skb)->partial_cov) {
    851                 if (udp_lib_checksum_complete(skb))
     852                checksum_valid = !udp_lib_checksum_complete(skb);
     853                if (!checksum_valid)
    852854                        goto csum_copy_err;
    853855        }
  • src/linux/adm5120/linux-2.6.23/net/ipv6/udp.c

    r10172 r31865  
    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.