diff options
Diffstat (limited to 'net/ipv6/tcp_ipv6.c')
| -rw-r--r-- | net/ipv6/tcp_ipv6.c | 8 | 
1 files changed, 5 insertions, 3 deletions
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 60a5295a7de6..49fa2e8c3fa9 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -391,10 +391,12 @@ static void tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,  	np = inet6_sk(sk);  	if (type == NDISC_REDIRECT) { -		struct dst_entry *dst = __sk_dst_check(sk, np->dst_cookie); +		if (!sock_owned_by_user(sk)) { +			struct dst_entry *dst = __sk_dst_check(sk, np->dst_cookie); -		if (dst) -			dst->ops->redirect(dst, sk, skb); +			if (dst) +				dst->ops->redirect(dst, sk, skb); +		}  		goto out;  	}  | 
