diff options
author | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
---|---|---|
committer | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
commit | ada47b5fe13d89735805b566185f4885f5a3f750 (patch) | |
tree | 644b88f8a71896307d71438e9b3af49126ffb22b /net/ipv6/exthdrs.c | |
parent | 43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff) | |
parent | 3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff) |
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'net/ipv6/exthdrs.c')
-rw-r--r-- | net/ipv6/exthdrs.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/net/ipv6/exthdrs.c b/net/ipv6/exthdrs.c index df159fffe4bc..8a659f92d17a 100644 --- a/net/ipv6/exthdrs.c +++ b/net/ipv6/exthdrs.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/netdevice.h> | 29 | #include <linux/netdevice.h> |
30 | #include <linux/in6.h> | 30 | #include <linux/in6.h> |
31 | #include <linux/icmpv6.h> | 31 | #include <linux/icmpv6.h> |
32 | #include <linux/slab.h> | ||
32 | 33 | ||
33 | #include <net/dst.h> | 34 | #include <net/dst.h> |
34 | #include <net/sock.h> | 35 | #include <net/sock.h> |
@@ -481,7 +482,7 @@ looped_back: | |||
481 | IP6_INC_STATS_BH(net, ip6_dst_idev(skb_dst(skb)), | 482 | IP6_INC_STATS_BH(net, ip6_dst_idev(skb_dst(skb)), |
482 | IPSTATS_MIB_INHDRERRORS); | 483 | IPSTATS_MIB_INHDRERRORS); |
483 | icmpv6_send(skb, ICMPV6_TIME_EXCEED, ICMPV6_EXC_HOPLIMIT, | 484 | icmpv6_send(skb, ICMPV6_TIME_EXCEED, ICMPV6_EXC_HOPLIMIT, |
484 | 0, skb->dev); | 485 | 0); |
485 | kfree_skb(skb); | 486 | kfree_skb(skb); |
486 | return -1; | 487 | return -1; |
487 | } | 488 | } |
@@ -559,6 +560,11 @@ static inline struct inet6_dev *ipv6_skb_idev(struct sk_buff *skb) | |||
559 | return skb_dst(skb) ? ip6_dst_idev(skb_dst(skb)) : __in6_dev_get(skb->dev); | 560 | return skb_dst(skb) ? ip6_dst_idev(skb_dst(skb)) : __in6_dev_get(skb->dev); |
560 | } | 561 | } |
561 | 562 | ||
563 | static inline struct net *ipv6_skb_net(struct sk_buff *skb) | ||
564 | { | ||
565 | return skb_dst(skb) ? dev_net(skb_dst(skb)->dev) : dev_net(skb->dev); | ||
566 | } | ||
567 | |||
562 | /* Router Alert as of RFC 2711 */ | 568 | /* Router Alert as of RFC 2711 */ |
563 | 569 | ||
564 | static int ipv6_hop_ra(struct sk_buff *skb, int optoff) | 570 | static int ipv6_hop_ra(struct sk_buff *skb, int optoff) |
@@ -580,8 +586,8 @@ static int ipv6_hop_ra(struct sk_buff *skb, int optoff) | |||
580 | static int ipv6_hop_jumbo(struct sk_buff *skb, int optoff) | 586 | static int ipv6_hop_jumbo(struct sk_buff *skb, int optoff) |
581 | { | 587 | { |
582 | const unsigned char *nh = skb_network_header(skb); | 588 | const unsigned char *nh = skb_network_header(skb); |
589 | struct net *net = ipv6_skb_net(skb); | ||
583 | u32 pkt_len; | 590 | u32 pkt_len; |
584 | struct net *net = dev_net(skb_dst(skb)->dev); | ||
585 | 591 | ||
586 | if (nh[optoff + 1] != 4 || (optoff & 3) != 2) { | 592 | if (nh[optoff + 1] != 4 || (optoff & 3) != 2) { |
587 | LIMIT_NETDEBUG(KERN_DEBUG "ipv6_hop_jumbo: wrong jumbo opt length/alignment %d\n", | 593 | LIMIT_NETDEBUG(KERN_DEBUG "ipv6_hop_jumbo: wrong jumbo opt length/alignment %d\n", |