Skip to content

Commit cd71829

Browse files
committed
gossip: Limit announcement sigs reply
A splice where reestablish happens at the right moment causes an infinite loop of announcement signatures being sent back and forth. Limit the announcement sigs we send in response to announcement sigs to once per channel session. ChangelogNone
1 parent d98bce8 commit cd71829

File tree

3 files changed

+9
-1
lines changed

3 files changed

+9
-1
lines changed

lightningd/channel.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,7 @@ struct channel *new_unsaved_channel(struct peer *peer,
322322
/* Nothing happened yet */
323323
memset(&channel->stats, 0, sizeof(channel->stats));
324324
channel->state_changes = tal_arr(channel, struct channel_state_change *, 0);
325+
channel->replied_to_announcement_sigs = false;
325326

326327
/* No shachain yet */
327328
channel->their_shachain.id = 0;
@@ -632,6 +633,7 @@ struct channel *new_channel(struct peer *peer, u64 dbid,
632633
channel->num_onchain_spent_calls = 0;
633634
channel->stats = *stats;
634635
channel->state_changes = tal_steal(channel, state_changes);
636+
channel->replied_to_announcement_sigs = false;
635637

636638
/* Populate channel->channel_gossip */
637639
channel_gossip_init(channel, take(peer_update));

lightningd/channel.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,9 @@ struct channel {
353353

354354
/* Our change history. */
355355
struct channel_state_change **state_changes;
356+
357+
/* Have we replied to announcement_signatures once? */
358+
bool replied_to_announcement_sigs;
356359
};
357360

358361
/* Is channel owned (and should be talking to peer) */

lightningd/channel_gossip.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -688,7 +688,10 @@ void channel_gossip_got_announcement_sigs(struct channel *channel,
688688
* - MUST respond with its own `announcement_signatures`
689689
* message.
690690
*/
691-
send_channel_announce_sigs(channel);
691+
if(!channel->replied_to_announcement_sigs) {
692+
send_channel_announce_sigs(channel);
693+
channel->replied_to_announcement_sigs = true;
694+
}
692695
check_channel_gossip(channel);
693696
return;
694697
}

0 commit comments

Comments
 (0)