Files
linux/include/net
Alexey Kodanev 1e4661b4d1 udplite: fix partial checksum initialization
[ Upstream commit 15f35d49c9 ]

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: ed70fcfcee ("net: Call skb_checksum_init in IPv4")
Fixes: e4f45b7f40 ("net: Call skb_checksum_init in IPv6")
Signed-off-by: Alexey Kodanev <alexey.kodanev@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-03-08 22:47:35 -08:00
..
2017-07-11 06:08:58 -04:00
2017-04-05 10:15:20 +02:00
2016-07-08 12:20:57 +02:00
2016-04-25 16:44:27 -04:00
2016-04-25 16:44:27 -04:00
2015-03-06 21:50:02 -05:00
2017-08-31 14:42:19 -07:00
2017-11-13 10:34:54 +09:00
2017-10-11 09:49:34 +02:00
2017-11-16 10:49:00 +09:00
2017-12-11 14:10:06 -05:00
2016-04-27 22:48:25 -04:00
2017-10-07 21:22:58 +01:00
2017-09-29 06:19:32 +01:00
2016-08-17 19:36:23 -04:00
2016-10-03 02:00:22 -04:00
2016-07-08 12:20:57 +02:00
2017-11-08 16:12:33 +09:00
2016-03-23 22:09:58 -04:00
2017-12-05 14:37:13 -05:00
2017-12-28 14:28:22 -05:00
2015-03-12 22:58:12 -04:00
2018-01-03 11:33:37 -05:00