if (inet->opt)
kfree(inet->opt);
- BUG_ON(sk->sk_nx_info);
- BUG_ON(sk->sk_vx_info);
+ clr_vx_info(&sk->sk_vx_info);
+ sk->sk_xid = -1;
+ clr_nx_info(&sk->sk_nx_info);
+ sk->sk_nid = -1;
+
dst_release(sk->sk_dst_cache);
#ifdef INET_REFCNT_DEBUG
atomic_dec(&inet_sock_nr);
if (!answer)
goto out_sk_free;
err = -EPERM;
+ if ((protocol == IPPROTO_ICMP) && vx_ccaps(VXC_RAW_ICMP))
+ goto override;
if (answer->capability > 0 && !capable(answer->capability))
goto out_sk_free;
+override:
err = -EPROTONOSUPPORT;
if (!protocol)
goto out_sk_free;
timeout = sk->sk_lingertime;
sock->sk = NULL;
clr_vx_info(&sk->sk_vx_info);
+ sk->sk_xid = -1;
clr_nx_info(&sk->sk_nx_info);
+ sk->sk_nid = -1;
sk->sk_prot->close(sk, timeout);
}
return 0;