diff options
| -rw-r--r-- | net/core/netpoll.c | 4 | ||||
| -rw-r--r-- | net/ipv4/ip_gre.c | 3 | ||||
| -rw-r--r-- | net/ipv4/ip_output.c | 3 | ||||
| -rw-r--r-- | net/ipv4/ipip.c | 3 | ||||
| -rw-r--r-- | net/ipv4/ipmr.c | 3 | ||||
| -rw-r--r-- | net/ipv4/ipvs/ip_vs_xmit.c | 3 | ||||
| -rw-r--r-- | net/ipv4/xfrm4_mode_beet.c | 3 | ||||
| -rw-r--r-- | net/ipv4/xfrm4_mode_transport.c | 4 | ||||
| -rw-r--r-- | net/ipv4/xfrm4_mode_tunnel.c | 3 | ||||
| -rw-r--r-- | net/ipv6/ip6_output.c | 14 | ||||
| -rw-r--r-- | net/ipv6/ip6_tunnel.c | 3 | ||||
| -rw-r--r-- | net/ipv6/sit.c | 3 |
12 files changed, 34 insertions, 15 deletions
diff --git a/net/core/netpoll.c b/net/core/netpoll.c index b4d1cdd58f11..44e030eb6e75 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c | |||
| @@ -308,7 +308,9 @@ void netpoll_send_udp(struct netpoll *np, const char *msg, int len) | |||
| 308 | if (udph->check == 0) | 308 | if (udph->check == 0) |
| 309 | udph->check = CSUM_MANGLED_0; | 309 | udph->check = CSUM_MANGLED_0; |
| 310 | 310 | ||
| 311 | skb->nh.iph = iph = (struct iphdr *)skb_push(skb, sizeof(*iph)); | 311 | skb_push(skb, sizeof(*iph)); |
| 312 | skb_reset_network_header(skb); | ||
| 313 | iph = skb->nh.iph; | ||
| 312 | 314 | ||
| 313 | /* iph->version = 4; iph->ihl = 5; */ | 315 | /* iph->version = 4; iph->ihl = 5; */ |
| 314 | put_unaligned(0x45, (unsigned char *)iph); | 316 | put_unaligned(0x45, (unsigned char *)iph); |
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index ced2c4baf174..f84ca6668fb9 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c | |||
| @@ -828,7 +828,8 @@ static int ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 828 | } | 828 | } |
| 829 | 829 | ||
| 830 | skb->h.raw = skb->nh.raw; | 830 | skb->h.raw = skb->nh.raw; |
| 831 | skb->nh.raw = skb_push(skb, gre_hlen); | 831 | skb_push(skb, gre_hlen); |
| 832 | skb_reset_network_header(skb); | ||
| 832 | memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); | 833 | memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); |
| 833 | IPCB(skb)->flags &= ~(IPSKB_XFRM_TUNNEL_SIZE | IPSKB_XFRM_TRANSFORMED | | 834 | IPCB(skb)->flags &= ~(IPSKB_XFRM_TUNNEL_SIZE | IPSKB_XFRM_TRANSFORMED | |
| 834 | IPSKB_REROUTED); | 835 | IPSKB_REROUTED); |
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 32f1a23a80f9..d329718a8e8c 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
| @@ -503,7 +503,8 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*)) | |||
| 503 | if (frag) { | 503 | if (frag) { |
| 504 | frag->ip_summed = CHECKSUM_NONE; | 504 | frag->ip_summed = CHECKSUM_NONE; |
| 505 | frag->h.raw = frag->data; | 505 | frag->h.raw = frag->data; |
| 506 | frag->nh.raw = __skb_push(frag, hlen); | 506 | __skb_push(frag, hlen); |
| 507 | skb_reset_network_header(frag); | ||
| 507 | memcpy(frag->nh.raw, iph, hlen); | 508 | memcpy(frag->nh.raw, iph, hlen); |
| 508 | iph = frag->nh.iph; | 509 | iph = frag->nh.iph; |
| 509 | iph->tot_len = htons(frag->len); | 510 | iph->tot_len = htons(frag->len); |
diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c index 5f886c892861..843cc09f961f 100644 --- a/net/ipv4/ipip.c +++ b/net/ipv4/ipip.c | |||
| @@ -619,7 +619,8 @@ static int ipip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 619 | } | 619 | } |
| 620 | 620 | ||
| 621 | skb->h.raw = skb->nh.raw; | 621 | skb->h.raw = skb->nh.raw; |
| 622 | skb->nh.raw = skb_push(skb, sizeof(struct iphdr)); | 622 | skb_push(skb, sizeof(struct iphdr)); |
| 623 | skb_reset_network_header(skb); | ||
| 623 | memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); | 624 | memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); |
| 624 | IPCB(skb)->flags &= ~(IPSKB_XFRM_TUNNEL_SIZE | IPSKB_XFRM_TRANSFORMED | | 625 | IPCB(skb)->flags &= ~(IPSKB_XFRM_TUNNEL_SIZE | IPSKB_XFRM_TRANSFORMED | |
| 625 | IPSKB_REROUTED); | 626 | IPSKB_REROUTED); |
diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c index f73f4e402f72..05c82ca45aaf 100644 --- a/net/ipv4/ipmr.c +++ b/net/ipv4/ipmr.c | |||
| @@ -1593,7 +1593,8 @@ int ipmr_get_route(struct sk_buff *skb, struct rtmsg *rtm, int nowait) | |||
| 1593 | return -ENOMEM; | 1593 | return -ENOMEM; |
| 1594 | } | 1594 | } |
| 1595 | 1595 | ||
| 1596 | skb2->nh.raw = skb_push(skb2, sizeof(struct iphdr)); | 1596 | skb_push(skb2, sizeof(struct iphdr)); |
| 1597 | skb_reset_network_header(skb2); | ||
| 1597 | skb2->nh.iph->ihl = sizeof(struct iphdr)>>2; | 1598 | skb2->nh.iph->ihl = sizeof(struct iphdr)>>2; |
| 1598 | skb2->nh.iph->saddr = rt->rt_src; | 1599 | skb2->nh.iph->saddr = rt->rt_src; |
| 1599 | skb2->nh.iph->daddr = rt->rt_dst; | 1600 | skb2->nh.iph->daddr = rt->rt_dst; |
diff --git a/net/ipv4/ipvs/ip_vs_xmit.c b/net/ipv4/ipvs/ip_vs_xmit.c index f73c5acf5dd1..d1403d0855ed 100644 --- a/net/ipv4/ipvs/ip_vs_xmit.c +++ b/net/ipv4/ipvs/ip_vs_xmit.c | |||
| @@ -385,7 +385,8 @@ ip_vs_tunnel_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, | |||
| 385 | /* fix old IP header checksum */ | 385 | /* fix old IP header checksum */ |
| 386 | ip_send_check(old_iph); | 386 | ip_send_check(old_iph); |
| 387 | 387 | ||
| 388 | skb->nh.raw = skb_push(skb, sizeof(struct iphdr)); | 388 | skb_push(skb, sizeof(struct iphdr)); |
| 389 | skb_reset_network_header(skb); | ||
| 389 | memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); | 390 | memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); |
| 390 | 391 | ||
| 391 | /* drop old route */ | 392 | /* drop old route */ |
diff --git a/net/ipv4/xfrm4_mode_beet.c b/net/ipv4/xfrm4_mode_beet.c index d419e15d9803..eaaf3565f3b2 100644 --- a/net/ipv4/xfrm4_mode_beet.c +++ b/net/ipv4/xfrm4_mode_beet.c | |||
| @@ -40,7 +40,8 @@ static int xfrm4_beet_output(struct xfrm_state *x, struct sk_buff *skb) | |||
| 40 | if (unlikely(optlen)) | 40 | if (unlikely(optlen)) |
| 41 | hdrlen += IPV4_BEET_PHMAXLEN - (optlen & 4); | 41 | hdrlen += IPV4_BEET_PHMAXLEN - (optlen & 4); |
| 42 | 42 | ||
| 43 | skb->nh.raw = skb_push(skb, x->props.header_len + hdrlen); | 43 | skb_push(skb, x->props.header_len + hdrlen); |
| 44 | skb_reset_network_header(skb); | ||
| 44 | top_iph = skb->nh.iph; | 45 | top_iph = skb->nh.iph; |
| 45 | skb->h.raw += sizeof(*iph) - hdrlen; | 46 | skb->h.raw += sizeof(*iph) - hdrlen; |
| 46 | 47 | ||
diff --git a/net/ipv4/xfrm4_mode_transport.c b/net/ipv4/xfrm4_mode_transport.c index 92676b7e4034..290c0f2e7c29 100644 --- a/net/ipv4/xfrm4_mode_transport.c +++ b/net/ipv4/xfrm4_mode_transport.c | |||
| @@ -32,7 +32,9 @@ static int xfrm4_transport_output(struct xfrm_state *x, struct sk_buff *skb) | |||
| 32 | ihl = iph->ihl * 4; | 32 | ihl = iph->ihl * 4; |
| 33 | skb->h.raw += ihl; | 33 | skb->h.raw += ihl; |
| 34 | 34 | ||
| 35 | skb->nh.raw = memmove(skb_push(skb, x->props.header_len), iph, ihl); | 35 | skb_push(skb, x->props.header_len); |
| 36 | skb_reset_network_header(skb); | ||
| 37 | memmove(skb->nh.raw, iph, ihl); | ||
| 36 | return 0; | 38 | return 0; |
| 37 | } | 39 | } |
| 38 | 40 | ||
diff --git a/net/ipv4/xfrm4_mode_tunnel.c b/net/ipv4/xfrm4_mode_tunnel.c index ffc6005d1d55..bec851f278e5 100644 --- a/net/ipv4/xfrm4_mode_tunnel.c +++ b/net/ipv4/xfrm4_mode_tunnel.c | |||
| @@ -49,7 +49,8 @@ static int xfrm4_tunnel_output(struct xfrm_state *x, struct sk_buff *skb) | |||
| 49 | iph = skb->nh.iph; | 49 | iph = skb->nh.iph; |
| 50 | skb->h.ipiph = iph; | 50 | skb->h.ipiph = iph; |
| 51 | 51 | ||
| 52 | skb->nh.raw = skb_push(skb, x->props.header_len); | 52 | skb_push(skb, x->props.header_len); |
| 53 | skb_reset_network_header(skb); | ||
| 53 | top_iph = skb->nh.iph; | 54 | top_iph = skb->nh.iph; |
| 54 | 55 | ||
| 55 | top_iph->ihl = 5; | 56 | top_iph->ihl = 5; |
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index 4406546d3ce8..8a7b5c760147 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c | |||
| @@ -191,7 +191,9 @@ int ip6_xmit(struct sock *sk, struct sk_buff *skb, struct flowi *fl, | |||
| 191 | ipv6_push_nfrag_opts(skb, opt, &proto, &first_hop); | 191 | ipv6_push_nfrag_opts(skb, opt, &proto, &first_hop); |
| 192 | } | 192 | } |
| 193 | 193 | ||
| 194 | hdr = skb->nh.ipv6h = (struct ipv6hdr*)skb_push(skb, sizeof(struct ipv6hdr)); | 194 | skb_push(skb, sizeof(struct ipv6hdr)); |
| 195 | skb_reset_network_header(skb); | ||
| 196 | hdr = skb->nh.ipv6h; | ||
| 195 | 197 | ||
| 196 | /* | 198 | /* |
| 197 | * Fill in the IPv6 header | 199 | * Fill in the IPv6 header |
| @@ -626,7 +628,8 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)) | |||
| 626 | 628 | ||
| 627 | __skb_pull(skb, hlen); | 629 | __skb_pull(skb, hlen); |
| 628 | fh = (struct frag_hdr*)__skb_push(skb, sizeof(struct frag_hdr)); | 630 | fh = (struct frag_hdr*)__skb_push(skb, sizeof(struct frag_hdr)); |
| 629 | skb->nh.raw = __skb_push(skb, hlen); | 631 | __skb_push(skb, hlen); |
| 632 | skb_reset_network_header(skb); | ||
| 630 | memcpy(skb->nh.raw, tmp_hdr, hlen); | 633 | memcpy(skb->nh.raw, tmp_hdr, hlen); |
| 631 | 634 | ||
| 632 | ipv6_select_ident(skb, fh); | 635 | ipv6_select_ident(skb, fh); |
| @@ -649,7 +652,8 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)) | |||
| 649 | frag->ip_summed = CHECKSUM_NONE; | 652 | frag->ip_summed = CHECKSUM_NONE; |
| 650 | frag->h.raw = frag->data; | 653 | frag->h.raw = frag->data; |
| 651 | fh = (struct frag_hdr*)__skb_push(frag, sizeof(struct frag_hdr)); | 654 | fh = (struct frag_hdr*)__skb_push(frag, sizeof(struct frag_hdr)); |
| 652 | frag->nh.raw = __skb_push(frag, hlen); | 655 | __skb_push(frag, hlen); |
| 656 | skb_reset_network_header(frag); | ||
| 653 | memcpy(frag->nh.raw, tmp_hdr, hlen); | 657 | memcpy(frag->nh.raw, tmp_hdr, hlen); |
| 654 | offset += skb->len - hlen - sizeof(struct frag_hdr); | 658 | offset += skb->len - hlen - sizeof(struct frag_hdr); |
| 655 | fh->nexthdr = nexthdr; | 659 | fh->nexthdr = nexthdr; |
| @@ -1346,7 +1350,9 @@ int ip6_push_pending_frames(struct sock *sk) | |||
| 1346 | if (opt && opt->opt_nflen) | 1350 | if (opt && opt->opt_nflen) |
| 1347 | ipv6_push_nfrag_opts(skb, opt, &proto, &final_dst); | 1351 | ipv6_push_nfrag_opts(skb, opt, &proto, &final_dst); |
| 1348 | 1352 | ||
| 1349 | skb->nh.ipv6h = hdr = (struct ipv6hdr*) skb_push(skb, sizeof(struct ipv6hdr)); | 1353 | skb_push(skb, sizeof(struct ipv6hdr)); |
| 1354 | skb_reset_network_header(skb); | ||
| 1355 | hdr = skb->nh.ipv6h; | ||
| 1350 | 1356 | ||
| 1351 | *(__be32*)hdr = fl->fl6_flowlabel | | 1357 | *(__be32*)hdr = fl->fl6_flowlabel | |
| 1352 | htonl(0x60000000 | ((int)np->cork.tclass << 20)); | 1358 | htonl(0x60000000 | ((int)np->cork.tclass << 20)); |
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c index 30df8e6c42cc..a1e4f39c6793 100644 --- a/net/ipv6/ip6_tunnel.c +++ b/net/ipv6/ip6_tunnel.c | |||
| @@ -907,7 +907,8 @@ static int ip6_tnl_xmit2(struct sk_buff *skb, | |||
| 907 | init_tel_txopt(&opt, encap_limit); | 907 | init_tel_txopt(&opt, encap_limit); |
| 908 | ipv6_push_nfrag_opts(skb, &opt.ops, &proto, NULL); | 908 | ipv6_push_nfrag_opts(skb, &opt.ops, &proto, NULL); |
| 909 | } | 909 | } |
| 910 | skb->nh.raw = skb_push(skb, sizeof(struct ipv6hdr)); | 910 | skb_push(skb, sizeof(struct ipv6hdr)); |
| 911 | skb_reset_network_header(skb); | ||
| 911 | ipv6h = skb->nh.ipv6h; | 912 | ipv6h = skb->nh.ipv6h; |
| 912 | *(__be32*)ipv6h = fl->fl6_flowlabel | htonl(0x60000000); | 913 | *(__be32*)ipv6h = fl->fl6_flowlabel | htonl(0x60000000); |
| 913 | dsfield = INET_ECN_encapsulate(0, dsfield); | 914 | dsfield = INET_ECN_encapsulate(0, dsfield); |
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c index 0477728578fe..62883d41b6c3 100644 --- a/net/ipv6/sit.c +++ b/net/ipv6/sit.c | |||
| @@ -554,7 +554,8 @@ static int ipip6_tunnel_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 554 | } | 554 | } |
| 555 | 555 | ||
| 556 | skb->h.raw = skb->nh.raw; | 556 | skb->h.raw = skb->nh.raw; |
| 557 | skb->nh.raw = skb_push(skb, sizeof(struct iphdr)); | 557 | skb_push(skb, sizeof(struct iphdr)); |
| 558 | skb_reset_network_header(skb); | ||
| 558 | memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); | 559 | memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); |
| 559 | IPCB(skb)->flags = 0; | 560 | IPCB(skb)->flags = 0; |
| 560 | dst_release(skb->dst); | 561 | dst_release(skb->dst); |
