From 122dae1076a08df2672d282028baa94d60db65de Mon Sep 17 00:00:00 2001 From: Dusty Daemon Date: Thu, 19 Jun 2025 18:31:30 -0400 Subject: [PATCH] =?UTF-8?q?splice:=20Even=20if=20the=20psbt=E2=80=99s=20?= =?UTF-8?q?=E2=80=9Cmatch=E2=80=9D=20the=20sig=20data=20may=20vary?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since the signature data may vary, we must copy the new psbt into splicing->current_psbt. This never occured during normal operation, but when doing a cross splice there may be vital signature(s) in the psbt that came from another splice that get dropped without this step. --- channeld/channeld.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/channeld/channeld.c b/channeld/channeld.c index 69b322f57..ea28dbc40 100644 --- a/channeld/channeld.c +++ b/channeld/channeld.c @@ -4521,6 +4521,9 @@ static void splice_initiator_user_update(struct peer *peer, const u8 *inmsg) /* If there no are no changes, we consider the splice user finalized */ if (!interactivetx_has_changes(ictx, ictx->desired_psbt)) { + peer->splicing->current_psbt = tal_free(peer->splicing->current_psbt); + peer->splicing->current_psbt = clone_psbt(peer->splicing, + ictx->desired_psbt); splice_initiator_user_finalized(peer); tal_steal(last_inflight(peer), last_inflight(peer)->psbt); return;