static int unix_writable(const struct sock *sk, unsigned char state)
 {
        return state != TCP_LISTEN &&
-              (refcount_read(&sk->sk_wmem_alloc) << 2) <= sk->sk_sndbuf;
+               (refcount_read(&sk->sk_wmem_alloc) << 2) <= READ_ONCE(sk->sk_sndbuf);
 }
 
 static void unix_write_space(struct sock *sk)
        }
 
        err = -EMSGSIZE;
-       if (len > sk->sk_sndbuf - 32)
+       if (len > READ_ONCE(sk->sk_sndbuf) - 32)
                goto out;
 
        if (len > SKB_MAX_ALLOC) {
                                                   &err, 0);
                } else {
                        /* Keep two messages in the pipe so it schedules better */
-                       size = min_t(int, size, (sk->sk_sndbuf >> 1) - 64);
+                       size = min_t(int, size, (READ_ONCE(sk->sk_sndbuf) >> 1) - 64);
 
                        /* allow fallback to order-0 allocations */
                        size = min_t(int, size, SKB_MAX_HEAD(0) + UNIX_SKB_FRAGS_SZ);