]> git.baikalelectronics.ru Git - kernel.git/commit
net: Fix save software checksum complete
authorTom Herbert <therbert@google.com>
Sun, 15 Jun 2014 06:24:03 +0000 (23:24 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sun, 15 Jun 2014 08:00:49 +0000 (01:00 -0700)
commitb88db4a82c903ada6e4d67a689c47793c5f0dddf
tree8deefff573270378b056f6f0915068a33578b2ad
parentb56c31b414039879f10d7ddcb7a1bf4523c6df16
net: Fix save software checksum complete

Geert reported issues regarding checksum complete and UDP.
The logic introduced in commit 37a5360c65c50650417e3d8
("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>
net/core/datagram.c
net/core/skbuff.c