Skip to content

Commit

Permalink
Merge pull request #7271
Browse files Browse the repository at this point in the history
4e74385 fix accessing an network address in a deleted context (moneromooo-monero)
  • Loading branch information
Snipa22 committed Jan 4, 2021
2 parents 71f7d4e + 4e74385 commit dbaf95a
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 9 deletions.
9 changes: 6 additions & 3 deletions src/cryptonote_protocol/cryptonote_protocol_handler.inl
Original file line number Diff line number Diff line change
Expand Up @@ -2835,12 +2835,15 @@ skip:
epee::string_tools::to_string_hex(context.m_pruning_seed) <<
"), score " << score << ", flush_all_spans " << flush_all_spans);

if (score > 0)
m_p2p->add_host_fail(context.m_remote_address, score);

m_block_queue.flush_spans(context.m_connection_id, flush_all_spans);

// copy since dropping the connection will invalidate the context, and thus the address
const auto remote_address = context.m_remote_address;

m_p2p->drop_connection(context);

if (score > 0)
m_p2p->add_host_fail(remote_address, score);
}
//------------------------------------------------------------------------------------------------------------------------
template<class t_core>
Expand Down
15 changes: 9 additions & 6 deletions src/p2p/net_node.inl
Original file line number Diff line number Diff line change
Expand Up @@ -1217,8 +1217,9 @@ namespace nodetool
if(!handle_remote_peerlist(rsp.local_peerlist_new, context))
{
LOG_WARNING_CC(context, "COMMAND_TIMED_SYNC: failed to handle_remote_peerlist(...), closing connection.");
const auto remote_address = context.m_remote_address;
m_network_zones.at(context.m_remote_address.get_zone()).m_net_server.get_config_object().close(context.m_connection_id );
add_host_fail(context.m_remote_address);
add_host_fail(remote_address);
}
if(!context.m_is_income)
m_network_zones.at(context.m_remote_address.get_zone()).m_peerlist.set_peer_just_seen(context.peer_id, context.m_remote_address, context.m_pruning_seed, context.m_rpc_port, context.m_rpc_credits_per_hash);
Expand Down Expand Up @@ -1382,7 +1383,7 @@ namespace nodetool
if(just_take_peerlist)
{
zone.m_net_server.get_config_object().close(con->m_connection_id);
LOG_DEBUG_CC(*con, "CONNECTION HANDSHAKED OK AND CLOSED.");
MDEBUG(na.str() << "CONNECTION HANDSHAKED OK AND CLOSED.");
return true;
}

Expand Down Expand Up @@ -1444,7 +1445,7 @@ namespace nodetool

zone.m_net_server.get_config_object().close(con->m_connection_id);

LOG_DEBUG_CC(*con, "CONNECTION HANDSHAKED OK AND CLOSED.");
MDEBUG(na.str() << "CONNECTION HANDSHAKED OK AND CLOSED.");

return true;
}
Expand Down Expand Up @@ -2472,20 +2473,22 @@ namespace nodetool
template<class t_payload_net_handler>
int node_server<t_payload_net_handler>::handle_handshake(int command, typename COMMAND_HANDSHAKE::request& arg, typename COMMAND_HANDSHAKE::response& rsp, p2p_connection_context& context)
{
// copy since dropping the connection will invalidate the context, and thus the address
const auto remote_address = context.m_remote_address;

if(arg.node_data.network_id != m_network_id)
{

LOG_INFO_CC(context, "WRONG NETWORK AGENT CONNECTED! id=" << arg.node_data.network_id);
drop_connection(context);
add_host_fail(context.m_remote_address);
add_host_fail(remote_address);
return 1;
}

if(!context.m_is_income)
{
LOG_WARNING_CC(context, "COMMAND_HANDSHAKE came not from incoming connection");
drop_connection(context);
add_host_fail(context.m_remote_address);
add_host_fail(remote_address);
return 1;
}

Expand Down

0 comments on commit dbaf95a

Please sign in to comment.