|
@@ -1432,6 +1432,17 @@ void udp6_proc_exit(struct net *net) {
|
|
|
}
|
|
|
#endif /* CONFIG_PROC_FS */
|
|
|
|
|
|
+void udp_v6_clear_sk(struct sock *sk, int size)
|
|
|
+{
|
|
|
+ struct inet_sock *inet = inet_sk(sk);
|
|
|
+
|
|
|
+ /* we do not want to clear pinet6 field, because of RCU lookups */
|
|
|
+ sk_prot_clear_portaddr_nulls(sk, offsetof(struct inet_sock, pinet6));
|
|
|
+
|
|
|
+ size -= offsetof(struct inet_sock, pinet6) + sizeof(inet->pinet6);
|
|
|
+ memset(&inet->pinet6 + 1, 0, size);
|
|
|
+}
|
|
|
+
|
|
|
/* ------------------------------------------------------------------------ */
|
|
|
|
|
|
struct proto udpv6_prot = {
|
|
@@ -1462,7 +1473,7 @@ struct proto udpv6_prot = {
|
|
|
.compat_setsockopt = compat_udpv6_setsockopt,
|
|
|
.compat_getsockopt = compat_udpv6_getsockopt,
|
|
|
#endif
|
|
|
- .clear_sk = sk_prot_clear_portaddr_nulls,
|
|
|
+ .clear_sk = udp_v6_clear_sk,
|
|
|
};
|
|
|
|
|
|
static struct inet_protosw udpv6_protosw = {
|