diff options
Diffstat (limited to 'net/ipv6/udp.c')
| -rw-r--r-- | net/ipv6/udp.c | 13 | 
1 files changed, 12 insertions, 1 deletions
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index d4defdd4493..42923b14dfa 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c @@ -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 = {  |