--- zzzz-none-000/linux-4.1.38/net/ipv6/udp.c 2017-01-18 18:48:06.000000000 +0000 +++ bcm63-7582-715/linux-4.1.38/net/ipv6/udp.c 2020-11-25 10:06:48.000000000 +0000 @@ -399,6 +399,9 @@ int peeked, off = 0; int err; int is_udplite = IS_UDPLITE(sk); +#if defined(CONFIG_BCM_KF_MISC_BACKPORTS) + bool checksum_valid = false; +#endif int is_udp4; bool slow; @@ -430,11 +433,22 @@ */ if (copied < ulen || UDP_SKB_CB(skb)->partial_cov) { +#if defined(CONFIG_BCM_KF_MISC_BACKPORTS) +/*CVE-2016-10229*/ + checksum_valid = !udp_lib_checksum_complete(skb); + if (!checksum_valid) +#else if (udp_lib_checksum_complete(skb)) +#endif goto csum_copy_err; } +#if defined(CONFIG_BCM_KF_MISC_BACKPORTS) +/*CVE-2016-10229*/ + if (checksum_valid || skb_csum_unnecessary(skb)) +#else if (skb_csum_unnecessary(skb)) +#endif err = skb_copy_datagram_msg(skb, sizeof(struct udphdr), msg, copied); else {