packet: in packet_do_bind, test fanout with bind_lock held
[pandora-kernel.git] / net / packet / af_packet.c
index 8fa99bd..2d44726 100644 (file)
@@ -2483,14 +2483,16 @@ static int packet_do_bind(struct sock *sk, const char *name, int ifindex,
        int ret = 0;
        bool unlisted = false;
 
-       if (po->fanout)
-               return -EINVAL;
-
        lock_sock(sk);
 
        spin_lock(&po->bind_lock);
        rcu_read_lock();
 
+       if (po->fanout) {
+               ret = -EINVAL;
+               goto out_unlock;
+       }
+
        if (name) {
                dev = dev_get_by_name_rcu(sock_net(sk), name);
                if (!dev) {