mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-11-25 19:14:39 +08:00
batman-adv: invalidate checksum on fragment reassembly
A more sophisticated implementation could try to combine fragment checksums
when all fragments have CHECKSUM_COMPLETE and are split at even offsets.
For now, we just set ip_summed to CHECKSUM_NONE to avoid "hw csum failure"
warnings in the kernel log when fragmented frames are received. In
consequence, skb_pull_rcsum() can be replaced with skb_pull().
Note that in usual setups, packets don't reach batman-adv with
CHECKSUM_COMPLETE (I assume NICs bail out of checksumming when they see
batadv's ethtype?), which is why the log messages do not occur on every
system using batman-adv. I could reproduce this issue by stacking
batman-adv on top of a VXLAN interface.
Fixes: 610bfc6bc9
("batman-adv: Receive fragmented packets and merge")
Tested-by: Maximilian Wilhelm <max@sdn.clinic>
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
This commit is contained in:
parent
abd6360591
commit
3bf2a09da9
@ -288,7 +288,8 @@ batadv_frag_merge_packets(struct hlist_head *chain)
|
|||||||
/* Move the existing MAC header to just before the payload. (Override
|
/* Move the existing MAC header to just before the payload. (Override
|
||||||
* the fragment header.)
|
* the fragment header.)
|
||||||
*/
|
*/
|
||||||
skb_pull_rcsum(skb_out, hdr_size);
|
skb_pull(skb_out, hdr_size);
|
||||||
|
skb_out->ip_summed = CHECKSUM_NONE;
|
||||||
memmove(skb_out->data - ETH_HLEN, skb_mac_header(skb_out), ETH_HLEN);
|
memmove(skb_out->data - ETH_HLEN, skb_mac_header(skb_out), ETH_HLEN);
|
||||||
skb_set_mac_header(skb_out, -ETH_HLEN);
|
skb_set_mac_header(skb_out, -ETH_HLEN);
|
||||||
skb_reset_network_header(skb_out);
|
skb_reset_network_header(skb_out);
|
||||||
|
Loading…
Reference in New Issue
Block a user