diff --git a/[refs] b/[refs] index c6fa20b74683..5722ef44d447 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7e3a42a12c4b9d99bfe81cb929cadf0e08a37c49 +refs/heads/master: c37ccc0d4e2a4ee52f1a40cff1be0049f2104bba diff --git a/trunk/net/ipv4/udp.c b/trunk/net/ipv4/udp.c index bcb5def2b09e..7e4d9c871153 100644 --- a/trunk/net/ipv4/udp.c +++ b/trunk/net/ipv4/udp.c @@ -189,6 +189,11 @@ int udp_lib_get_port(struct sock *sk, unsigned short snum, inet_sk(sk)->num = snum; sk->sk_hash = snum; if (sk_unhashed(sk)) { + /* + * We need that previous write to sk->sk_hash committed + * before write to sk->next done in following add_node() variant + */ + smp_wmb(); sk_add_node_rcu(sk, &hslot->head); sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1); }