|
@@ -122,10 +122,12 @@ static void dccp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
|
|
np = inet6_sk(sk);
|
|
np = inet6_sk(sk);
|
|
|
|
|
|
if (type == NDISC_REDIRECT) {
|
|
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;
|
|
goto out;
|
|
}
|
|
}
|
|
|
|
|