diff options
Diffstat (limited to 'net/core/sock.c')
| -rw-r--r-- | net/core/sock.c | 3 | 
1 files changed, 2 insertions, 1 deletions
diff --git a/net/core/sock.c b/net/core/sock.c index e1f6f225f01..305cba401ae 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -1073,7 +1073,8 @@ static void __sk_free(struct sock *sk)  	if (sk->sk_destruct)  		sk->sk_destruct(sk); -	filter = rcu_dereference(sk->sk_filter); +	filter = rcu_dereference_check(sk->sk_filter, +				       atomic_read(&sk->sk_wmem_alloc) == 0);  	if (filter) {  		sk_filter_uncharge(sk, filter);  		rcu_assign_pointer(sk->sk_filter, NULL);  |