In tipc_node_write_unlock(), TIPC_NOTIFY_NODE_UP with an empty cluster_scope takes a node reference and schedules n->work. If the link flaps down and up while that work is still pending, the next NODE_UP takes another reference, but schedule_work() returns false and the extra reference is never dropped. The tipc_node structure leaks. Verified by flapping the bearer while the work is pending: one reference is leaked per repeated NODE_UP, while the work is put only once when it finally runs. Drop the reference when the work was already queued. Reported-by: Xiang Mei Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Weiming Shi --- net/tipc/node.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/tipc/node.c b/net/tipc/node.c index b545a47d6ccb..428c4eacd02f 100644 --- a/net/tipc/node.c +++ b/net/tipc/node.c @@ -447,7 +447,8 @@ static void tipc_node_write_unlock(struct tipc_node *n) /* Defer bulk distribution to work queue */ if (rc > 0) { tipc_node_get(n); - schedule_work(&n->work); + if (!schedule_work(&n->work)) + tipc_node_put(n); } else if (rc < 0) { /* Bring the link down to start over bulk distribution * when the link is up again. -- 2.43.0