diff options
-rw-r--r-- | net/ipv4/igmp.c | 3 | ||||
-rw-r--r-- | net/ipv4/ipvs/ip_vs_xmit.c | 3 | ||||
-rw-r--r-- | net/ipv6/mcast.c | 5 | ||||
-rw-r--r-- | net/ipv6/ndisc.c | 20 |
4 files changed, 19 insertions, 12 deletions
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c index 8f0df7b4dfe7..b0efd279ddb4 100644 --- a/net/ipv4/igmp.c +++ b/net/ipv4/igmp.c | |||
@@ -333,7 +333,8 @@ static struct sk_buff *igmpv3_newpack(struct net_device *dev, int size) | |||
333 | ((u8*)&pip[1])[2] = 0; | 333 | ((u8*)&pip[1])[2] = 0; |
334 | ((u8*)&pip[1])[3] = 0; | 334 | ((u8*)&pip[1])[3] = 0; |
335 | 335 | ||
336 | skb->h.raw = skb_put(skb, sizeof(*pig)); | 336 | skb->h.raw = skb->nh.raw + sizeof(struct iphdr) + 4; |
337 | skb_put(skb, sizeof(*pig)); | ||
337 | pig = igmpv3_report_hdr(skb); | 338 | pig = igmpv3_report_hdr(skb); |
338 | pig->type = IGMPV3_HOST_MEMBERSHIP_REPORT; | 339 | pig->type = IGMPV3_HOST_MEMBERSHIP_REPORT; |
339 | pig->resv1 = 0; | 340 | pig->resv1 = 0; |
diff --git a/net/ipv4/ipvs/ip_vs_xmit.c b/net/ipv4/ipvs/ip_vs_xmit.c index a7aee6822033..c6276d08b31e 100644 --- a/net/ipv4/ipvs/ip_vs_xmit.c +++ b/net/ipv4/ipvs/ip_vs_xmit.c | |||
@@ -323,6 +323,7 @@ ip_vs_tunnel_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, | |||
323 | struct iphdr *old_iph = ip_hdr(skb); | 323 | struct iphdr *old_iph = ip_hdr(skb); |
324 | u8 tos = old_iph->tos; | 324 | u8 tos = old_iph->tos; |
325 | __be16 df = old_iph->frag_off; | 325 | __be16 df = old_iph->frag_off; |
326 | unsigned char *old_h = skb_transport_header(skb); | ||
326 | struct iphdr *iph; /* Our new IP header */ | 327 | struct iphdr *iph; /* Our new IP header */ |
327 | int max_headroom; /* The extra header space needed */ | 328 | int max_headroom; /* The extra header space needed */ |
328 | int mtu; | 329 | int mtu; |
@@ -380,7 +381,7 @@ ip_vs_tunnel_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, | |||
380 | old_iph = ip_hdr(skb); | 381 | old_iph = ip_hdr(skb); |
381 | } | 382 | } |
382 | 383 | ||
383 | skb->h.raw = (void *) old_iph; | 384 | skb->h.raw = old_h; |
384 | 385 | ||
385 | /* fix old IP header checksum */ | 386 | /* fix old IP header checksum */ |
386 | ip_send_check(old_iph); | 387 | ip_send_check(old_iph); |
diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c index c6436f5e3e9f..07e86ebb46b8 100644 --- a/net/ipv6/mcast.c +++ b/net/ipv6/mcast.c | |||
@@ -1423,8 +1423,9 @@ static struct sk_buff *mld_newpack(struct net_device *dev, int size) | |||
1423 | 1423 | ||
1424 | memcpy(skb_put(skb, sizeof(ra)), ra, sizeof(ra)); | 1424 | memcpy(skb_put(skb, sizeof(ra)), ra, sizeof(ra)); |
1425 | 1425 | ||
1426 | pmr =(struct mld2_report *)skb_put(skb, sizeof(*pmr)); | 1426 | skb_set_transport_header(skb, skb->tail - skb->data); |
1427 | skb->h.raw = (unsigned char *)pmr; | 1427 | skb_put(skb, sizeof(*pmr)); |
1428 | pmr = (struct mld2_report *)skb_transport_header(skb); | ||
1428 | pmr->type = ICMPV6_MLD2_REPORT; | 1429 | pmr->type = ICMPV6_MLD2_REPORT; |
1429 | pmr->resv1 = 0; | 1430 | pmr->resv1 = 0; |
1430 | pmr->csum = 0; | 1431 | pmr->csum = 0; |
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index f9a85ab594db..f8e619772fb4 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c | |||
@@ -492,8 +492,9 @@ static void ndisc_send_na(struct net_device *dev, struct neighbour *neigh, | |||
492 | skb_reserve(skb, LL_RESERVED_SPACE(dev)); | 492 | skb_reserve(skb, LL_RESERVED_SPACE(dev)); |
493 | ip6_nd_hdr(sk, skb, dev, src_addr, daddr, IPPROTO_ICMPV6, len); | 493 | ip6_nd_hdr(sk, skb, dev, src_addr, daddr, IPPROTO_ICMPV6, len); |
494 | 494 | ||
495 | msg = (struct nd_msg *)skb_put(skb, len); | 495 | skb_set_transport_header(skb, skb->tail - skb->data); |
496 | skb->h.raw = (unsigned char*)msg; | 496 | skb_put(skb, len); |
497 | msg = (struct nd_msg *)skb_transport_header(skb); | ||
497 | 498 | ||
498 | msg->icmph.icmp6_type = NDISC_NEIGHBOUR_ADVERTISEMENT; | 499 | msg->icmph.icmp6_type = NDISC_NEIGHBOUR_ADVERTISEMENT; |
499 | msg->icmph.icmp6_code = 0; | 500 | msg->icmph.icmp6_code = 0; |
@@ -583,8 +584,9 @@ void ndisc_send_ns(struct net_device *dev, struct neighbour *neigh, | |||
583 | skb_reserve(skb, LL_RESERVED_SPACE(dev)); | 584 | skb_reserve(skb, LL_RESERVED_SPACE(dev)); |
584 | ip6_nd_hdr(sk, skb, dev, saddr, daddr, IPPROTO_ICMPV6, len); | 585 | ip6_nd_hdr(sk, skb, dev, saddr, daddr, IPPROTO_ICMPV6, len); |
585 | 586 | ||
586 | msg = (struct nd_msg *)skb_put(skb, len); | 587 | skb_set_transport_header(skb, skb->tail - skb->data); |
587 | skb->h.raw = (unsigned char*)msg; | 588 | skb_put(skb, len); |
589 | msg = (struct nd_msg *)skb_transport_header(skb); | ||
588 | msg->icmph.icmp6_type = NDISC_NEIGHBOUR_SOLICITATION; | 590 | msg->icmph.icmp6_type = NDISC_NEIGHBOUR_SOLICITATION; |
589 | msg->icmph.icmp6_code = 0; | 591 | msg->icmph.icmp6_code = 0; |
590 | msg->icmph.icmp6_cksum = 0; | 592 | msg->icmph.icmp6_cksum = 0; |
@@ -683,8 +685,9 @@ void ndisc_send_rs(struct net_device *dev, struct in6_addr *saddr, | |||
683 | skb_reserve(skb, LL_RESERVED_SPACE(dev)); | 685 | skb_reserve(skb, LL_RESERVED_SPACE(dev)); |
684 | ip6_nd_hdr(sk, skb, dev, saddr, daddr, IPPROTO_ICMPV6, len); | 686 | ip6_nd_hdr(sk, skb, dev, saddr, daddr, IPPROTO_ICMPV6, len); |
685 | 687 | ||
686 | hdr = (struct icmp6hdr *)skb_put(skb, len); | 688 | skb_set_transport_header(skb, skb->tail - skb->data); |
687 | skb->h.raw = (unsigned char*)hdr; | 689 | skb_put(skb, len); |
690 | hdr = icmp6_hdr(skb); | ||
688 | hdr->icmp6_type = NDISC_ROUTER_SOLICITATION; | 691 | hdr->icmp6_type = NDISC_ROUTER_SOLICITATION; |
689 | hdr->icmp6_code = 0; | 692 | hdr->icmp6_code = 0; |
690 | hdr->icmp6_cksum = 0; | 693 | hdr->icmp6_cksum = 0; |
@@ -1519,8 +1522,9 @@ void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh, | |||
1519 | ip6_nd_hdr(sk, buff, dev, &saddr_buf, &ipv6_hdr(skb)->saddr, | 1522 | ip6_nd_hdr(sk, buff, dev, &saddr_buf, &ipv6_hdr(skb)->saddr, |
1520 | IPPROTO_ICMPV6, len); | 1523 | IPPROTO_ICMPV6, len); |
1521 | 1524 | ||
1522 | icmph = (struct icmp6hdr *)skb_put(buff, len); | 1525 | skb_set_transport_header(buff, buff->tail - buff->data); |
1523 | buff->h.raw = (unsigned char*)icmph; | 1526 | skb_put(buff, len); |
1527 | icmph = icmp6_hdr(buff); | ||
1524 | 1528 | ||
1525 | memset(icmph, 0, sizeof(struct icmp6hdr)); | 1529 | memset(icmph, 0, sizeof(struct icmp6hdr)); |
1526 | icmph->icmp6_type = NDISC_REDIRECT; | 1530 | icmph->icmp6_type = NDISC_REDIRECT; |