]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - net/core/filter.c
[NET]: Fix sk->sk_filter field access
[net-next-2.6.git] / net / core / filter.c
index 5b4486a60cf6bca668bf4f5e7232d6df1a37dbb9..6732782a5a4009f8aaf9313da097b81e746977f7 100644 (file)
@@ -422,10 +422,10 @@ int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk)
        if (!err) {
                struct sk_filter *old_fp;
 
-               spin_lock_bh(&sk->sk_lock.slock);
-               old_fp = sk->sk_filter;
-               sk->sk_filter = fp;
-               spin_unlock_bh(&sk->sk_lock.slock);
+               rcu_read_lock_bh();
+               old_fp = rcu_dereference(sk->sk_filter);
+               rcu_assign_pointer(sk->sk_filter, fp);
+               rcu_read_unlock_bh();
                fp = old_fp;
        }