]> err.no Git - linux-2.6/blobdiff - net/core/sock.c
fix reentrancy bug in arcmsr_get_iop_{r,w}qbuffer()
[linux-2.6] / net / core / sock.c
index 4ed9b507c1e78d519488088e0285785ad1460f9b..bba9949681ff7e132f84629602814dc7d9aa17d4 100644 (file)
@@ -232,7 +232,7 @@ static int sock_set_timeout(long *timeo_p, char __user *optval, int optlen)
                        warned++;
                        printk(KERN_INFO "sock_set_timeout: `%s' (pid %d) "
                               "tries to set negative timeout\n",
-                               current->comm, current->pid);
+                               current->comm, task_pid_nr(current));
                return 0;
        }
        *timeo_p = MAX_SCHEDULE_TIMEOUT;
@@ -428,7 +428,6 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
                    char __user *optval, int optlen)
 {
        struct sock *sk=sock->sk;
-       struct sk_filter *filter;
        int val;
        int valbool;
        struct linger ling;
@@ -652,16 +651,7 @@ set_rcvbuf:
                break;
 
        case SO_DETACH_FILTER:
-               rcu_read_lock_bh();
-               filter = rcu_dereference(sk->sk_filter);
-               if (filter) {
-                       rcu_assign_pointer(sk->sk_filter, NULL);
-                       sk_filter_release(sk, filter);
-                       rcu_read_unlock_bh();
-                       break;
-               }
-               rcu_read_unlock_bh();
-               ret = -ENONET;
+               ret = sk_detach_filter(sk);
                break;
 
        case SO_PASSSEC:
@@ -869,6 +859,7 @@ static inline void sock_lock_init(struct sock *sk)
 
 /**
  *     sk_alloc - All socket objects are allocated here
+ *     @net: the applicable net namespace
  *     @family: protocol family
  *     @priority: for allocation (%GFP_KERNEL, %GFP_ATOMIC, etc)
  *     @prot: struct proto associated with this new sock instance
@@ -924,7 +915,7 @@ void sk_free(struct sock *sk)
 
        filter = rcu_dereference(sk->sk_filter);
        if (filter) {
-               sk_filter_release(sk, filter);
+               sk_filter_uncharge(sk, filter);
                rcu_assign_pointer(sk->sk_filter, NULL);
        }
 
@@ -1658,7 +1649,6 @@ void sock_enable_timestamp(struct sock *sk)
                net_enable_timestamp();
        }
 }
-EXPORT_SYMBOL(sock_enable_timestamp);
 
 /*
  *     Get a socket option on an socket.