From f6191c8ef9eced8871db2e3657b6e6c01509ebf9 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Sat, 22 Jan 2022 15:19:32 +1030 Subject: [PATCH] gossipd: fix unknown channel_update recovery logic. An "err" is only returned if the channel_update is malformed: more common is that it's fine, but we don't know the scid. Signed-off-by: Rusty Russell --- gossipd/gossipd.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/gossipd/gossipd.c b/gossipd/gossipd.c index 0b76ff8ff..ac5580856 100644 --- a/gossipd/gossipd.c +++ b/gossipd/gossipd.c @@ -261,11 +261,12 @@ static u8 *handle_channel_update_msg(struct peer *peer, const u8 *msg) unknown_scid.u64 = 0; err = handle_channel_update(peer->daemon->rstate, msg, peer, &unknown_scid, false); - if (err) { - if (unknown_scid.u64 != 0) - query_unknown_channel(peer->daemon, peer, &unknown_scid); + if (err) return err; - } + + /* If it's an unknown channel, ask someone about it */ + if (unknown_scid.u64 != 0) + query_unknown_channel(peer->daemon, peer, &unknown_scid); /*~ As a nasty compromise in the spec, we only forward `channel_announce` * once we have a `channel_update`; the channel isn't *usable* for