diff --git a/src/test/fuzz/process_message.cpp b/src/test/fuzz/process_message.cpp --- a/src/test/fuzz/process_message.cpp +++ b/src/test/fuzz/process_message.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -89,6 +90,7 @@ void test_one_input(const std::vector &buffer) { const Config &config = GetConfig(); FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); + ConnmanTestMsg &connman = *(ConnmanTestMsg *)g_setup->m_node.connman.get(); const std::string random_message_type{ fuzzed_data_provider.ConsumeBytesAsString(CMessageHeader::COMMAND_SIZE) .c_str()}; @@ -99,19 +101,16 @@ CDataStream random_bytes_data_stream{ fuzzed_data_provider.ConsumeRemainingBytes(), SER_NETWORK, PROTOCOL_VERSION}; - CNode p2p_node{0, - ServiceFlags(NODE_NETWORK | NODE_BLOOM), - 0, - INVALID_SOCKET, - CAddress{CService{in_addr{0x0100007f}, 7777}, NODE_NETWORK}, - 0, - 0, - CAddress{}, - std::string{}, - false}; + CNode &p2p_node = + *std::make_unique( + 0, ServiceFlags(NODE_NETWORK | NODE_BLOOM), 0, INVALID_SOCKET, + CAddress{CService{in_addr{0x0100007f}, 7777}, NODE_NETWORK}, 0, 0, + CAddress{}, std::string{}, false) + .release(); p2p_node.fSuccessfullyConnected = true; p2p_node.nVersion = PROTOCOL_VERSION; p2p_node.SetSendVersion(PROTOCOL_VERSION); + connman.AddTestNode(p2p_node); g_setup->m_node.peer_logic->InitializeNode(config, &p2p_node); try { (void)ProcessMessage( @@ -132,4 +131,7 @@ } } SyncWithValidationInterfaceQueue(); + // See init.cpp for rationale for implicit locking order requirement + LOCK2(::cs_main, g_cs_orphans); + g_setup->m_node.connman->StopNodes(); } diff --git a/src/test/fuzz/process_messages.cpp b/src/test/fuzz/process_messages.cpp --- a/src/test/fuzz/process_messages.cpp +++ b/src/test/fuzz/process_messages.cpp @@ -87,6 +87,8 @@ } catch (const std::ios_base::failure &) { } } - connman.ClearTestNodes(); SyncWithValidationInterfaceQueue(); + // See init.cpp for rationale for implicit locking order requirement + LOCK2(::cs_main, g_cs_orphans); + g_setup->m_node.connman->StopNodes(); }