diff options
author | Patrick McHardy <kaber@trash.net> | 2005-08-17 15:03:32 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2005-08-17 15:03:32 -0400 |
commit | 97077c4a9868fce8ac151512cde5d24fc1144f24 (patch) | |
tree | 600484f09f59126988fb153287bad7a27a511931 | |
parent | 2ad56496627630ebc99f06af5f81ca23e17e014e (diff) |
[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>
-rw-r--r-- | net/ipv6/raw.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index e2b848ec9851..1d4d75b34d32 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c | |||
@@ -328,6 +328,8 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb) | |||
328 | 328 | ||
329 | if (skb->ip_summed != CHECKSUM_UNNECESSARY) { | 329 | if (skb->ip_summed != CHECKSUM_UNNECESSARY) { |
330 | if (skb->ip_summed == CHECKSUM_HW) { | 330 | if (skb->ip_summed == CHECKSUM_HW) { |
331 | skb_postpull_rcsum(skb, skb->nh.raw, | ||
332 | skb->h.raw - skb->nh.raw); | ||
331 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 333 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
332 | if (csum_ipv6_magic(&skb->nh.ipv6h->saddr, | 334 | if (csum_ipv6_magic(&skb->nh.ipv6h->saddr, |
333 | &skb->nh.ipv6h->daddr, | 335 | &skb->nh.ipv6h->daddr, |