diff options
Diffstat (limited to 'net/ipv6/tcp_ipv6.c')
| -rw-r--r-- | net/ipv6/tcp_ipv6.c | 15 | 
1 files changed, 9 insertions, 6 deletions
| diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 5b3c70ff7a72..1835480336ac 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -93,13 +93,16 @@ static struct tcp_md5sig_key *tcp_v6_md5_do_lookup(struct sock *sk,  static void inet6_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb)  {  	struct dst_entry *dst = skb_dst(skb); -	const struct rt6_info *rt = (const struct rt6_info *)dst; -	dst_hold(dst); -	sk->sk_rx_dst = dst; -	inet_sk(sk)->rx_dst_ifindex = skb->skb_iif; -	if (rt->rt6i_node) -		inet6_sk(sk)->rx_dst_cookie = rt->rt6i_node->fn_sernum; +	if (dst) { +		const struct rt6_info *rt = (const struct rt6_info *)dst; + +		dst_hold(dst); +		sk->sk_rx_dst = dst; +		inet_sk(sk)->rx_dst_ifindex = skb->skb_iif; +		if (rt->rt6i_node) +			inet6_sk(sk)->rx_dst_cookie = rt->rt6i_node->fn_sernum; +	}  }  static void tcp_v6_hash(struct sock *sk) | 
