Commit 3058e01d authored by Hoang Le's avatar Hoang Le Committed by David S. Miller

tipc: make node link identity publish thread safe

The using of the node address and node link identity are not thread safe,
meaning that two publications may be published the same values, as result
one of them will get failure because of already existing in the name table.
To avoid this we have to use the node address and node link identity values
from inside the node item's write lock protection.

Fixes: 50a3499a ("tipc: simplify signature of tipc_namtbl_publish()")
Acked-by: default avatarJon Maloy <jmaloy@redhat.com>
Signed-off-by: default avatarHoang Le <hoang.h.le@dektech.com.au>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b94cbc90
...@@ -423,18 +423,18 @@ static void tipc_node_write_unlock(struct tipc_node *n) ...@@ -423,18 +423,18 @@ static void tipc_node_write_unlock(struct tipc_node *n)
write_unlock_bh(&n->lock); write_unlock_bh(&n->lock);
if (flags & TIPC_NOTIFY_NODE_DOWN) if (flags & TIPC_NOTIFY_NODE_DOWN)
tipc_publ_notify(net, publ_list, n->addr, n->capabilities); tipc_publ_notify(net, publ_list, sk.node, n->capabilities);
if (flags & TIPC_NOTIFY_NODE_UP) if (flags & TIPC_NOTIFY_NODE_UP)
tipc_named_node_up(net, n->addr, n->capabilities); tipc_named_node_up(net, sk.node, n->capabilities);
if (flags & TIPC_NOTIFY_LINK_UP) { if (flags & TIPC_NOTIFY_LINK_UP) {
tipc_mon_peer_up(net, n->addr, bearer_id); tipc_mon_peer_up(net, sk.node, bearer_id);
tipc_nametbl_publish(net, &ua, &sk, n->link_id); tipc_nametbl_publish(net, &ua, &sk, sk.ref);
} }
if (flags & TIPC_NOTIFY_LINK_DOWN) { if (flags & TIPC_NOTIFY_LINK_DOWN) {
tipc_mon_peer_down(net, n->addr, bearer_id); tipc_mon_peer_down(net, sk.node, bearer_id);
tipc_nametbl_withdraw(net, &ua, &sk, n->link_id); tipc_nametbl_withdraw(net, &ua, &sk, sk.ref);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment