diff options
Diffstat (limited to 'net/ipv6/raw.c')
| -rw-r--r-- | net/ipv6/raw.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index 5f26645195dc..9b2bcde73f19 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c | |||
| @@ -361,7 +361,7 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb) | |||
| 361 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 361 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
| 362 | 362 | ||
| 363 | if (skb->ip_summed == CHECKSUM_COMPLETE) { | 363 | if (skb->ip_summed == CHECKSUM_COMPLETE) { |
| 364 | skb_postpull_rcsum(skb, skb->nh.raw, | 364 | skb_postpull_rcsum(skb, skb_network_header(skb), |
| 365 | skb->h.raw - skb->nh.raw); | 365 | skb->h.raw - skb->nh.raw); |
| 366 | if (!csum_ipv6_magic(&skb->nh.ipv6h->saddr, | 366 | if (!csum_ipv6_magic(&skb->nh.ipv6h->saddr, |
| 367 | &skb->nh.ipv6h->daddr, | 367 | &skb->nh.ipv6h->daddr, |
| @@ -488,7 +488,8 @@ static int rawv6_push_pending_frames(struct sock *sk, struct flowi *fl, | |||
| 488 | goto out; | 488 | goto out; |
| 489 | 489 | ||
| 490 | offset = rp->offset; | 490 | offset = rp->offset; |
| 491 | total_len = inet_sk(sk)->cork.length - (skb->nh.raw - skb->data); | 491 | total_len = inet_sk(sk)->cork.length - (skb_network_header(skb) - |
| 492 | skb->data); | ||
| 492 | if (offset >= total_len - 1) { | 493 | if (offset >= total_len - 1) { |
| 493 | err = -EINVAL; | 494 | err = -EINVAL; |
| 494 | ip6_flush_pending_frames(sk); | 495 | ip6_flush_pending_frames(sk); |
