From 5c19c558413c941a079c53c084a80bd2c946eb23 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Thu, 14 Jun 2018 12:29:33 +0930 Subject: [PATCH] gossipd: fix take leak when peer is dying. In this case, local and remote are *both* NULL; so if someone tries to send a packet with take(), we need to free it. Signed-off-by: Rusty Russell --- gossipd/gossip.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gossipd/gossip.c b/gossipd/gossip.c index a2d02f19e..72eb5bf87 100644 --- a/gossipd/gossip.c +++ b/gossipd/gossip.c @@ -506,6 +506,9 @@ static void queue_peer_msg(struct peer *peer, const u8 *msg TAKES) if (taken(msg)) tal_free(msg); daemon_conn_send(peer->remote, take(send)); + } else { /* Waiting to die. */ + if (taken(msg)) + tal_free(msg); } }