diff options
Diffstat (limited to 'net/ipv6/ip6_output.c')
-rw-r--r-- | net/ipv6/ip6_output.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index c77db0b95e26..4b15938bef4d 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c | |||
@@ -137,7 +137,8 @@ static int ip6_output2(struct sk_buff *skb) | |||
137 | struct inet6_dev *idev = ip6_dst_idev(skb->dst); | 137 | struct inet6_dev *idev = ip6_dst_idev(skb->dst); |
138 | 138 | ||
139 | if (!(dev->flags & IFF_LOOPBACK) && (!np || np->mc_loop) && | 139 | if (!(dev->flags & IFF_LOOPBACK) && (!np || np->mc_loop) && |
140 | ((mroute6_socket && !(IP6CB(skb)->flags & IP6SKB_FORWARDED)) || | 140 | ((mroute6_socket(dev_net(dev)) && |
141 | !(IP6CB(skb)->flags & IP6SKB_FORWARDED)) || | ||
141 | ipv6_chk_mcast_addr(dev, &ipv6_hdr(skb)->daddr, | 142 | ipv6_chk_mcast_addr(dev, &ipv6_hdr(skb)->daddr, |
142 | &ipv6_hdr(skb)->saddr))) { | 143 | &ipv6_hdr(skb)->saddr))) { |
143 | struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC); | 144 | struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC); |
@@ -490,7 +491,7 @@ int ip6_forward(struct sk_buff *skb) | |||
490 | We don't send redirects to frames decapsulated from IPsec. | 491 | We don't send redirects to frames decapsulated from IPsec. |
491 | */ | 492 | */ |
492 | if (skb->dev == dst->dev && dst->neighbour && opt->srcrt == 0 && | 493 | if (skb->dev == dst->dev && dst->neighbour && opt->srcrt == 0 && |
493 | !skb->sp) { | 494 | !skb_sec_path(skb)) { |
494 | struct in6_addr *target = NULL; | 495 | struct in6_addr *target = NULL; |
495 | struct rt6_info *rt; | 496 | struct rt6_info *rt; |
496 | struct neighbour *n = dst->neighbour; | 497 | struct neighbour *n = dst->neighbour; |