From e09857873174af2df60c7a8b8a9c84be09dedb9b Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Thu, 14 Jun 2018 12:10:06 +0930 Subject: [PATCH] gossipd: fix leak when we fail to dup fds. In this case, peer would stay around, but conn would be freed. Signed-off-by: Rusty Russell --- gossipd/gossip.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gossipd/gossip.c b/gossipd/gossip.c index 74b817897..622f829ad 100644 --- a/gossipd/gossip.c +++ b/gossipd/gossip.c @@ -650,10 +650,6 @@ static struct io_plan *peer_connected(struct io_conn *conn, struct peer *peer) = peer->daemon->rstate->broadcasts->next_index; } - /* This is a full peer now; we keep it around until master says - * it's dead. */ - peer_finalized(peer); - /* We will not have anything queued, since we're not duplex. */ msg = towire_gossip_peer_connected(peer, &peer->id, &peer->addr, &peer->local->pcs.cs, @@ -661,6 +657,10 @@ static struct io_plan *peer_connected(struct io_conn *conn, struct peer *peer) if (!send_peer_with_fds(peer, msg)) return io_close(conn); + /* This is a full peer now; we keep it around until master says + * it's dead. */ + peer_finalized(peer); + /* Start the gossip flowing. */ wake_gossip_out(peer);