[IPV6]: Fix raw socket hardware checksum failures
When packets hit raw sockets the csum update isn't done yet, do it manually. Packets can also reach rawv6_rcv on the output path through ip6_call_ra_chain, in this case skb->ip_summed is CHECKSUM_NONE and this codepath isn't executed. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
12aaa0855b
commit
793245eeb9
|
@ -328,6 +328,8 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb)
|
||||||
|
|
||||||
if (skb->ip_summed != CHECKSUM_UNNECESSARY) {
|
if (skb->ip_summed != CHECKSUM_UNNECESSARY) {
|
||||||
if (skb->ip_summed == CHECKSUM_HW) {
|
if (skb->ip_summed == CHECKSUM_HW) {
|
||||||
|
skb_postpull_rcsum(skb, skb->nh.raw,
|
||||||
|
skb->h.raw - skb->nh.raw);
|
||||||
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
skb->ip_summed = CHECKSUM_UNNECESSARY;
|
||||||
if (csum_ipv6_magic(&skb->nh.ipv6h->saddr,
|
if (csum_ipv6_magic(&skb->nh.ipv6h->saddr,
|
||||||
&skb->nh.ipv6h->daddr,
|
&skb->nh.ipv6h->daddr,
|
||||||
|
|
Loading…
Reference in New Issue