From: Alexey Kodanev <alexey.koda...@oracle.com> Date: Thu, 15 Feb 2018 20:18:43 +0300
> Since UDP-Lite is always using checksum, the following path is > triggered when calculating pseudo header for it: > > udp4_csum_init() or udp6_csum_init() > skb_checksum_init_zero_check() > __skb_checksum_validate_complete() > > The problem can appear if skb->len is less than CHECKSUM_BREAK. In > this particular case __skb_checksum_validate_complete() also invokes > __skb_checksum_complete(skb). If UDP-Lite is using partial checksum > that covers only part of a packet, the function will return bad > checksum and the packet will be dropped. > > It can be fixed if we skip skb_checksum_init_zero_check() and only > set the required pseudo header checksum for UDP-Lite with partial > checksum before udp4_csum_init()/udp6_csum_init() functions return. > > Fixes: ed70fcfcee95 ("net: Call skb_checksum_init in IPv4") > Fixes: e4f45b7f40bd ("net: Call skb_checksum_init in IPv6") > Signed-off-by: Alexey Kodanev <alexey.koda...@oracle.com> Applied and queued up for -stable, thanks Alexey.