tipc: Fix tipc_sk_reinit race conditions
authorHerbert Xu <herbert@gondor.apana.org.au>
Sat, 11 Feb 2017 11:26:46 +0000 (19:26 +0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 17 Feb 2017 17:28:35 +0000 (12:28 -0500)
commit40f9f439706073b4b0a654b3b99e18296b7990b3
treebaa437731befae16bef34595d72e2b64c2e4a97b
parent98687f426bb3e93b9dbbfb614ba331192beae482
tipc: Fix tipc_sk_reinit race conditions

There are two problems with the function tipc_sk_reinit.  Firstly
it's doing a manual walk over an rhashtable.  This is broken as
an rhashtable can be resized and if you manually walk over it
during a resize then you may miss entries.

Secondly it's missing memory barriers as previously the code used
spinlocks which provide the barriers implicitly.

This patch fixes both problems.

Fixes: 07f6c4bc048a ("tipc: convert tipc reference table to...")
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Acked-by: Ying Xue <ying.xue@windriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/tipc/net.c
net/tipc/socket.c