mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-25 16:11:45 +00:00
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: 07f6c4bc04
("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>
This commit is contained in:
parent
98687f426b
commit
40f9f43970
2 changed files with 23 additions and 11 deletions
|
@ -110,6 +110,10 @@ int tipc_net_start(struct net *net, u32 addr)
|
|||
char addr_string[16];
|
||||
|
||||
tn->own_addr = addr;
|
||||
|
||||
/* Ensure that the new address is visible before we reinit. */
|
||||
smp_mb();
|
||||
|
||||
tipc_named_reinit(net);
|
||||
tipc_sk_reinit(net);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue