linux/net/tipc
Jon Paul Maloy b45db71b52 tipc: eliminate race during node creation
Instances of struct node are created in the function tipc_disc_rcv()
under the assumption that there is no race between received discovery
messages arriving from the same node. This assumption is wrong.
When we use more than one bearer, it is possible that discovery
messages from the same node arrive at the same moment, resulting in
creation of two instances of struct tipc_node. This may later cause
confusion during link establishment, and may result in one of the links
never becoming activated.

We fix this by making lookup and potential creation of nodes atomic.
Instead of first looking up the node, and in case of failure, create it,
we now start with looking up the node inside node_link_create(), and
return a reference to that one if found. Otherwise, we go ahead and
create the node as we did before.

Reviewed-by: Erik Hugne <erik.hugne@ericsson.com>
Reviewed-by: Ying Xue <ying.xue@windriver.com>
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2015-02-04 16:09:31 -08:00
..
addr.c tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
addr.h tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
bcast.c tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
bcast.h tipc: make tipc broadcast link support net namespace 2015-01-12 16:24:33 -05:00
bearer.c tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
bearer.h tipc: make tipc broadcast link support net namespace 2015-01-12 16:24:33 -05:00
config.c tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
config.h tipc: involve namespace infrastructure 2015-01-12 16:24:32 -05:00
core.c tipc: make tipc random value aware of net namespace 2015-01-12 16:24:33 -05:00
core.h tipc: make tipc random value aware of net namespace 2015-01-12 16:24:33 -05:00
discover.c tipc: eliminate race during node creation 2015-02-04 16:09:31 -08:00
discover.h tipc: involve namespace infrastructure 2015-01-12 16:24:32 -05:00
eth_media.c tipc: improve and extend media address conversion functions 2014-05-14 15:19:48 -04:00
ib_media.c tipc: improve and extend media address conversion functions 2014-05-14 15:19:48 -04:00
Kconfig tipc: convert tipc reference table to use generic rhashtable 2015-01-08 19:47:14 -08:00
link.c tipc: add reference count to struct tipc_link 2015-02-04 16:09:31 -08:00
link.h tipc: avoid stale link after aborted failover 2015-02-04 16:09:31 -08:00
log.c tipc: remove print_buf and deprecated log buffer code 2012-07-13 19:34:43 -04:00
Makefile tipc: remove node subscription infrastructure 2014-11-26 12:30:16 -05:00
msg.c tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
msg.h tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
name_distr.c tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
name_distr.h tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
name_table.c tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
name_table.h tipc: name tipc name table support net namespace 2015-01-12 16:24:33 -05:00
net.c tipc: make tipc node address support net namespace 2015-01-12 16:24:33 -05:00
net.h tipc: make tipc node table aware of net namespace 2015-01-12 16:24:32 -05:00
netlink.c tipc: make netlink support net namespace 2015-01-12 16:24:34 -05:00
netlink.h tipc: cleanup core.c and core.h files 2015-01-12 16:24:31 -05:00
node.c tipc: eliminate race during node creation 2015-02-04 16:09:31 -08:00
node.h tipc: make tipc node table aware of net namespace 2015-01-12 16:24:32 -05:00
server.c tipc: make subscriber server support net namespace 2015-01-12 16:24:33 -05:00
server.h tipc: make subscriber server support net namespace 2015-01-12 16:24:33 -05:00
socket.c tipc: fix socket list regression in new nl api 2015-01-18 00:27:05 -05:00
socket.h tipc: make subscriber server support net namespace 2015-01-12 16:24:33 -05:00
subscr.c tipc: make subscriber server support net namespace 2015-01-12 16:24:33 -05:00
subscr.h tipc: make subscriber server support net namespace 2015-01-12 16:24:33 -05:00
sysctl.c tipc: add name distributor resiliency queue 2014-09-01 17:51:48 -07:00