Skip to content

Commit fae1e7e

Browse files
author
MarcoFalke
committed
fuzz: p2p: Detect peer deadlocks
1 parent 6d57909 commit fae1e7e

File tree

2 files changed

+13
-6
lines changed

2 files changed

+13
-6
lines changed

src/test/fuzz/process_messages.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,17 @@ FUZZ_TARGET(process_messages, .init = initialize_process_messages)
7878

7979
connman.FlushSendBuffer(random_node);
8080
(void)connman.ReceiveMsgFrom(random_node, std::move(net_msg));
81-
random_node.fPauseSend = false;
8281

83-
try {
84-
connman.ProcessMessagesOnce(random_node);
85-
} catch (const std::ios_base::failure&) {
82+
bool more_work{true};
83+
while (more_work) { // Ensure that every message is eventually processed in some way or another
84+
random_node.fPauseSend = false;
85+
86+
try {
87+
more_work = connman.ProcessMessagesOnce(random_node);
88+
} catch (const std::ios_base::failure&) {
89+
}
90+
g_setup->m_node.peerman->SendMessages(&random_node);
8691
}
87-
g_setup->m_node.peerman->SendMessages(&random_node);
8892
}
8993
SyncWithValidationInterfaceQueue();
9094
g_setup->m_node.connman->StopNodes();

src/test/util/net.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,10 @@ struct ConnmanTestMsg : public CConnman {
7070
bool relay_txs)
7171
EXCLUSIVE_LOCKS_REQUIRED(NetEventsInterface::g_msgproc_mutex);
7272

73-
void ProcessMessagesOnce(CNode& node) EXCLUSIVE_LOCKS_REQUIRED(NetEventsInterface::g_msgproc_mutex) { m_msgproc->ProcessMessages(&node, flagInterruptMsgProc); }
73+
bool ProcessMessagesOnce(CNode& node) EXCLUSIVE_LOCKS_REQUIRED(NetEventsInterface::g_msgproc_mutex)
74+
{
75+
return m_msgproc->ProcessMessages(&node, flagInterruptMsgProc);
76+
}
7477

7578
void NodeReceiveMsgBytes(CNode& node, Span<const uint8_t> msg_bytes, bool& complete) const;
7679

0 commit comments

Comments
 (0)