fuzz: register PeerManager in process_message(s)
What changed, and why it matters
This change only modifies Bitcoin Core's internal fuzz testing harnesses (tools used to automatically find bugs during development). It registers the peer manager with the validation signal system during fuzz tests so that more code paths are exercised, and removes a no-op synchronization call. There is no change to production network code, no fix for a live vulnerability, and no user-facing impact.
No action required. This is a test-only fuzzing harness improvement and does not affect production Bitcoin Core nodes.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit updates src/test/fuzz/process_message.cpp and src/test/fuzz/process_messages.cpp. It adds node.validation_signals->RegisterValidationInterface(node.peerman.get()) before fuzz target execution and a matching UnregisterValidationInterface after, so CValidationInterface callbacks in PeerManager are invoked during fuzzing. It also removes SyncWithValidationInterfaceQueue calls from ResetChainman because no validation interfaces are registered there. This is a test-infrastructure change only.
Changed components
src/test/fuzz/process_message.cppsrc/test/fuzz/process_messages.cppInspect captured patch +7 / −2
diff --git a/src/test/fuzz/process_message.cpp b/src/test/fuzz/process_message.cpp
index bd3c4ec9..a9413792 100644
--- a/src/test/fuzz/process_message.cpp
+++ b/src/test/fuzz/process_message.cpp
@@ -45,7 +45,6 @@ void ResetChainman(TestingSetup& setup)
options.include_dummy_extranonce = true;
MineBlock(setup.m_node, options);
}
- setup.m_node.validation_signals->SyncWithValidationInterfaceQueue();
}
} // namespace
@@ -100,6 +99,9 @@ FUZZ_TARGET(process_message, .init = initialize_process_message)
if (!LIMIT_TO_MESSAGE_TYPE.empty() && random_message_type != LIMIT_TO_MESSAGE_TYPE) {
return;
}
+
+ node.validation_signals->RegisterValidationInterface(node.peerman.get());
+
CNode& p2p_node = *ConsumeNodeAsUniquePtr(fuzzed_data_provider).release();
connman.AddTestNode(p2p_node);
@@ -125,6 +127,7 @@ FUZZ_TARGET(process_message, .init = initialize_process_message)
node.peerman->SendMessages(p2p_node);
}
node.validation_signals->SyncWithValidationInterfaceQueue();
+ node.validation_signals->UnregisterValidationInterface(node.peerman.get());
node.connman->StopNodes();
if (block_index_size != WITH_LOCK(chainman.GetMutex(), return chainman.BlockIndex().size())) {
// Reuse the global chainman, but reset it when it is dirty
diff --git a/src/test/fuzz/process_messages.cpp b/src/test/fuzz/process_messages.cpp
index 28752973..5c8fb3c1 100644
--- a/src/test/fuzz/process_messages.cpp
+++ b/src/test/fuzz/process_messages.cpp
@@ -40,7 +40,6 @@ void ResetChainman(TestingSetup& setup)
for (int i = 0; i < 2 * COINBASE_MATURITY; i++) {
MineBlock(setup.m_node, options);
}
- setup.m_node.validation_signals->SyncWithValidationInterfaceQueue();
}
} // namespace
@@ -84,6 +83,8 @@ FUZZ_TARGET(process_messages, .init = initialize_process_messages)
connman.SetMsgProc(node.peerman.get());
connman.SetAddrman(*node.addrman);
+ node.validation_signals->RegisterValidationInterface(node.peerman.get());
+
LOCK(NetEventsInterface::g_msgproc_mutex);
std::vector<CNode*> peers;
@@ -125,6 +126,7 @@ FUZZ_TARGET(process_messages, .init = initialize_process_messages)
}
}
node.validation_signals->SyncWithValidationInterfaceQueue();
+ node.validation_signals->UnregisterValidationInterface(node.peerman.get());
node.connman->StopNodes();
if (block_index_size != WITH_LOCK(chainman.GetMutex(), return chainman.BlockIndex().size())) {
// Reuse the global chainman, but reset it when it is dirty
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.