diff options
| author | Mark Brown <[email protected]> | 2015-10-12 18:09:27 +0100 | 
|---|---|---|
| committer | Mark Brown <[email protected]> | 2015-10-12 18:09:27 +0100 | 
| commit | 79828b4fa835f73cdaf4bffa48696abdcbea9d02 (patch) | |
| tree | 5e0fa7156acb75ba603022bc807df8f2fedb97a8 /net/ipv6/ip6_input.c | |
| parent | 721b51fcf91898299d96f4b72cb9434cda29dce6 (diff) | |
| parent | 8c1a9d6323abf0fb1e5dad96cf3f1c783505ea5a (diff) | |
Merge remote-tracking branch 'asoc/fix/rt5645' into asoc-fix-rt5645
Diffstat (limited to 'net/ipv6/ip6_input.c')
| -rw-r--r-- | net/ipv6/ip6_input.c | 11 | 
1 files changed, 6 insertions, 5 deletions
diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c index f2e464eba5ef..adba03ac7ce9 100644 --- a/net/ipv6/ip6_input.c +++ b/net/ipv6/ip6_input.c @@ -45,6 +45,7 @@  #include <net/addrconf.h>  #include <net/xfrm.h>  #include <net/inet_ecn.h> +#include <net/dst_metadata.h>  int ip6_rcv_finish(struct sock *sk, struct sk_buff *skb)  { @@ -55,7 +56,7 @@ int ip6_rcv_finish(struct sock *sk, struct sk_buff *skb)  		if (ipprot && ipprot->early_demux)  			ipprot->early_demux(skb);  	} -	if (!skb_dst(skb)) +	if (!skb_valid_dst(skb))  		ip6_route_input(skb);  	return dst_input(skb); @@ -98,7 +99,7 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt  	 * arrived via the sending interface (ethX), because of the  	 * nature of scoping architecture. --yoshfuji  	 */ -	IP6CB(skb)->iif = skb_dst(skb) ? ip6_dst_idev(skb_dst(skb))->dev->ifindex : dev->ifindex; +	IP6CB(skb)->iif = skb_valid_dst(skb) ? ip6_dst_idev(skb_dst(skb))->dev->ifindex : dev->ifindex;  	if (unlikely(!pskb_may_pull(skb, sizeof(*hdr))))  		goto err; @@ -331,10 +332,10 @@ int ip6_mc_input(struct sk_buff *skb)  				if (offset < 0)  					goto out; -				if (!ipv6_is_mld(skb, nexthdr, offset)) -					goto out; +				if (ipv6_is_mld(skb, nexthdr, offset)) +					deliver = true; -				deliver = true; +				goto out;  			}  			/* unknown RA - process it normally */  		}  |