[NET]: Move the get_net() from sock_copy()
authorPavel Emelyanov <xemul@openvz.org>
Thu, 1 Nov 2007 07:31:26 +0000 (00:31 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 1 Nov 2007 07:31:26 +0000 (00:31 -0700)
The sock_copy() is supposed to just clone the socket. In a perfect
world it has to be just memcpy, but we have to handle the security
mark correctly. All the extra setup must be performed in sk_clone()
call, so move the get_net() into more proper place.

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/sock.c

index fdacf9c8f1cb60149c4c1b347f1febb89fa3c743..9c2dbfaca60d6f91c90d1315e7204307b76c083b 100644 (file)
@@ -864,7 +864,6 @@ static void sock_copy(struct sock *nsk, const struct sock *osk)
 #endif
 
        memcpy(nsk, osk, osk->sk_prot->obj_size);
-       get_net(nsk->sk_net);
 #ifdef CONFIG_SECURITY_NETWORK
        nsk->sk_security = sptr;
        security_sk_clone(osk, nsk);
@@ -958,6 +957,7 @@ struct sock *sk_clone(const struct sock *sk, const gfp_t priority)
                sock_copy(newsk, sk);
 
                /* SANITY */
+               get_net(newsk->sk_net);
                sk_node_init(&newsk->sk_node);
                sock_lock_init(newsk);
                bh_lock_sock(newsk);