net: Use RCU_INIT_POINTER() to set sk_wq
authorLi RongQing <lirongqing@baidu.com>
Fri, 22 Feb 2019 09:08:22 +0000 (17:08 +0800)
committerDavid S. Miller <davem@davemloft.net>
Sun, 24 Feb 2019 20:37:23 +0000 (12:37 -0800)
This pointer is RCU protected, so proper primitives should be used.

Signed-off-by: Zhang Yu <zhangyu31@baidu.com>
Signed-off-by: Li RongQing <lirongqing@baidu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/sock.c

index f4b8b78..f5d82f3 100644 (file)
@@ -1865,7 +1865,7 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
                 */
                sk_refcnt_debug_inc(newsk);
                sk_set_socket(newsk, NULL);
-               newsk->sk_wq = NULL;
+               RCU_INIT_POINTER(newsk->sk_wq, NULL);
 
                if (newsk->sk_prot->sockets_allocated)
                        sk_sockets_allocated_inc(newsk);
@@ -2828,11 +2828,11 @@ void sock_init_data(struct socket *sock, struct sock *sk)
 
        if (sock) {
                sk->sk_type     =       sock->type;
-               sk->sk_wq       =       sock->wq;
+               RCU_INIT_POINTER(sk->sk_wq, sock->wq);
                sock->sk        =       sk;
                sk->sk_uid      =       SOCK_INODE(sock)->i_uid;
        } else {
-               sk->sk_wq       =       NULL;
+               RCU_INIT_POINTER(sk->sk_wq, NULL);
                sk->sk_uid      =       make_kuid(sock_net(sk)->user_ns, 0);
        }