[BUG] signmessage hangs forever on the VLS signer and freezes the node (hsmd queue wedge)
Repo: Blockstream/greenlight (or wherever signer/signerproxy issues live)
Severity: High — a single signmessage call makes the node unresponsive for all signing operations until it restarts.
Affects: All Greenlight nodes (reproduced on the gl-testing in-process python signer AND the production Rust VLS signer + hosted node).
Summary
Calling the node's signmessage RPC never completes. The request is forwarded to the signer via hsmd → gl-signerproxy → scheduler, and the signer (VLS) never returns a response. Because lightningd's hsmd channel is a serial queue, the stuck request blocks every subsequent signing operation — invoice creation, payments, channel ops — which then time out. The node only recovers after a restart (on hosted infra, outside the user's control).
Reproduction
Environment: testnet hosted node, lightningd v26.06gl1, glcli signer run (production Rust VLS signer), connected via cln-grpc.
- Healthy node — invoices mint fine.
- Call
signmessage (via cln-grpc SignMessage or the hsmd path):
- gl-testing harness: in-process python signer hangs on
signmessage (documented in alby-hub-greenlight's live E2E test).
- Production Rust VLS signer: same behavior — the request never completes (>45s, both through the hub's REST API and directly).
- Immediately after: any subsequent signing RPC hangs:
17:14:02 Signing message ← signmessage dispatched (never completes)
17:17:37 signmessage failed: context canceled ← caller gave up
17:18:25 invoice failed: context canceled ← invoice creation now ALSO hangs
- Restarting the local signer does not clear the wedge (the stuck request lives in the node-side hsmd queue, not the signer connection).
Expected behavior
signmessage either:
- completes with a signature (hsmd
SIGN_MESSAGE handled by the VLS signer), or
- returns a clean "not supported" error immediately — without leaving the hsmd queue wedged.
Impact
- Any client that calls
signmessage (e.g. lightning address / LNURL auth flows, node-identity verification, some wallets) can take a user's node offline for signing until the hosted node happens to restart.
- The wedge is silent: the node process stays up,
getinfo still responds, only signing operations hang.
Notes
- The same hsmd-queue wedge was previously observed only on the gl-testing python signer; this report confirms it on the production signer path (glcli signer / VLS).
- Suggested fix areas: (a) VLS signer implements or explicitly rejects
SIGN_MESSAGE; (b) signerproxy returns a timeout/error instead of leaving the request pending; (c) lightningd-side hsmd queue isolation so one stuck request cannot block all signing.
Evidence
- Timestamps/log excerpt above (hub log:
Signing message → invoice failed: context canceled).
- Reproduced twice: once with a 3-hour-old attached signer, once after killing the signer and letting it re-attach (PID respawn verified) — wedge persisted both times.
[BUG]
signmessagehangs forever on the VLS signer and freezes the node (hsmd queue wedge)Repo: Blockstream/greenlight (or wherever signer/signerproxy issues live)
Severity: High — a single
signmessagecall makes the node unresponsive for all signing operations until it restarts.Affects: All Greenlight nodes (reproduced on the gl-testing in-process python signer AND the production Rust VLS signer + hosted node).
Summary
Calling the node's
signmessageRPC never completes. The request is forwarded to the signer via hsmd → gl-signerproxy → scheduler, and the signer (VLS) never returns a response. Because lightningd's hsmd channel is a serial queue, the stuck request blocks every subsequent signing operation — invoice creation, payments, channel ops — which then time out. The node only recovers after a restart (on hosted infra, outside the user's control).Reproduction
Environment: testnet hosted node, lightningd v26.06gl1,
glcli signer run(production Rust VLS signer), connected via cln-grpc.signmessage(via cln-grpcSignMessageor the hsmd path):signmessage(documented in alby-hub-greenlight's live E2E test).Expected behavior
signmessageeither:SIGN_MESSAGEhandled by the VLS signer), orImpact
signmessage(e.g. lightning address / LNURL auth flows, node-identity verification, some wallets) can take a user's node offline for signing until the hosted node happens to restart.getinfostill responds, only signing operations hang.Notes
SIGN_MESSAGE; (b) signerproxy returns a timeout/error instead of leaving the request pending; (c) lightningd-side hsmd queue isolation so one stuck request cannot block all signing.Evidence
Signing message→invoice failed: context canceled).