X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=net%2Fcore%2Fsock.c;h=fcd397a762ff37d43846bb19a4db0211d9b88ae7;hb=47871889c601d8199c51a4086f77eebd77c29b0b;hp=472a59f205b0ac7a807b1a0f591d74530a1a227c;hpb=faf234220fb79a05891477a75180e1d9f7ab4105;p=safe%2Fjmp%2Flinux-2.6 diff --git a/net/core/sock.c b/net/core/sock.c index 472a59f..fcd397a 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);