AI-generated analysisPublished automatically and not human-verified. Validated context appears in community notes below.
← Watch feed
Low 43 Bitcoin

bookkeeper: fix assert() which happens with parallel queries.

Public commit record

What the developer wrote

Authored by Rusty Russell

73/100 · Adequate
bookkeeper: fix assert() which happens with parallel queries.

```
bookkeeper: plugins/bkpr/bookkeeper.c:1226: parse_and_log_chain_move: Assertion `e->db_id > bkpr->chainmoves_index' failed.
bookkeeper: FATAL SIGNAL 6 (version v25.09-245-g901714b-modded)
0x5d7d8718b40f send_backtrace
common/daemon.c:36
0x5d7d8718b4ab crashdump
common/daemon.c:81
0x7a6086c4532f ???
./signal/../sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c:0
0x7a6086c9eb2c __pthread_kill_implementation
./nptl/pthread_kill.c:44
0x7a6086c9eb2c __pthread_kill_internal
./nptl/pthread_kill.c:78
0x7a6086c9eb2c __GI___pthread_kill
./nptl/pthread_kill.c:89
0x7a6086c4527d __GI_raise
../sysdeps/posix/raise.c:26
0x7a6086c288fe __GI_abort
./stdlib/abort.c:79
0x7a6086c2881a __assert_fail_base
./assert/assert.c:96
0x7a6086c3b516 __assert_fail
./assert/assert.c:105
0x5d7d8717505d parse_and_log_chain_move
plugins/bkpr/bookkeeper.c:1226
0x5d7d871754f4 listchainmoves_done
plugins/bkpr/bookkeeper.c:169
0x5d7d87182a4b handle_rpc_reply
plugins/libplugin.c:1072
0x5d7d87182b5c rpc_conn_read_response
plugins/libplugin.c:1361
0x5d7d871ba660 next_plan
ccan/ccan/io/io.c:60
0x5d7d871bab31 do_plan
ccan/ccan/io/io.c:422
0x5d7d871babee io_ready
ccan/ccan/io/io.c:439
```

Reported-by: @michael1011
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Fixed: plugins: assertion crash in bookkeeper when fresh records arrive while multiple queries in progress.
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
The short version

What changed, and why it matters

This commit fixes a crash in Core Lightning's bookkeeper plugin. Under parallel queries, a bookkeeping record could arrive out of order, triggering an internal 'assertion' that immediately killed the plugin. The fix replaces the fatal assertion with a safe early return when an out-of-order race occurs, and removes the 'expected failure' marker from the related test so it now passes.

Recommended action

Apply the patch. The change is low-risk and defensive. Operators running bookkeeper with concurrent RPC workloads should upgrade to avoid the assertion crash. No immediate incident response is required unless the plugin crash is observed in logs.

Security signals we found

01

Denial-of-service condition: plugin aborts on assertion failure

02

Race condition between database writes and asynchronous RPC query replies

03

Fix removes fatal assertion in favor of defensive early return

04

Test previously marked as expected failure now enabled

Risk score

Why this scored 43/100

Our methodology →
Potential impact 12/30
Exploitability 5/25
Stealth signal 8/15
Affected reach 6/15
Confidence 8/10
Evidence quality 4/5
Human-validated context

Community notes

Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.

No validated notes yet.

The AI analysis stands alone for now. Submit a note if you can add evidence or important context.