diff options
author | Tom Herbert <therbert@google.com> | 2014-06-14 23:24:03 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-06-15 01:00:49 -0700 |
commit | 46fb51eb96cafb2c148b7b5119adb5e31a2bf3c4 (patch) | |
tree | 8deefff573270378b056f6f0915068a33578b2ad /lib/radix-tree.c | |
parent | 4b28252cada3d0521ab59751f4240ecdfb9bba18 (diff) | |
download | linux-46fb51eb96cafb2c148b7b5119adb5e31a2bf3c4.tar.gz linux-46fb51eb96cafb2c148b7b5119adb5e31a2bf3c4.tar.bz2 linux-46fb51eb96cafb2c148b7b5119adb5e31a2bf3c4.zip |
net: Fix save software checksum complete
Geert reported issues regarding checksum complete and UDP.
The logic introduced in commit 7e3cead5172927732f51fde
("net: Save software checksum complete") is not correct.
This patch:
1) Restores code in __skb_checksum_complete_header except for setting
CHECKSUM_UNNECESSARY. This function may be calculating checksum on
something less than skb->len.
2) Adds saving checksum to __skb_checksum_complete. The full packet
checksum 0..skb->len is calculated without adding in pseudo header.
This value is saved in skb->csum and then the pseudo header is added
to that to derive the checksum for validation.
3) In both __skb_checksum_complete_header and __skb_checksum_complete,
set skb->csum_valid to whether checksum of zero was computed. This
allows skb_csum_unnecessary to return true without changing to
CHECKSUM_UNNECESSARY which was done previously.
4) Copy new csum related bits in __copy_skb_header.
Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Tom Herbert <therbert@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'lib/radix-tree.c')
0 files changed, 0 insertions, 0 deletions