Skip to content

Commit daf5553

Browse files
committed
Avoid calling CAddrMan::Connected() on block-relay-only peer addresses
Connected() updates the time we serve in addr messages, so avoid leaking block-relay-only peer connections by avoiding these calls.
1 parent d67883d commit daf5553

File tree

5 files changed

+12
-10
lines changed

5 files changed

+12
-10
lines changed

src/net.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2624,7 +2624,7 @@ void CConnman::DeleteNode(CNode* pnode)
26242624
{
26252625
assert(pnode);
26262626
bool fUpdateConnectionTime = false;
2627-
m_msgproc->FinalizeNode(pnode->GetId(), fUpdateConnectionTime);
2627+
m_msgproc->FinalizeNode(*pnode, fUpdateConnectionTime);
26282628
if (fUpdateConnectionTime) {
26292629
addrman.Connected(pnode->addr);
26302630
}

src/net.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,7 @@ class NetEventsInterface
618618
virtual bool ProcessMessages(CNode* pnode, std::atomic<bool>& interrupt) = 0;
619619
virtual bool SendMessages(CNode* pnode) = 0;
620620
virtual void InitializeNode(CNode* pnode) = 0;
621-
virtual void FinalizeNode(NodeId id, bool& update_connection_time) = 0;
621+
virtual void FinalizeNode(const CNode& node, bool& update_connection_time) = 0;
622622

623623
protected:
624624
/**

src/net_processing.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -837,7 +837,8 @@ void PeerManager::ReattemptInitialBroadcast(CScheduler& scheduler) const
837837
scheduler.scheduleFromNow([&] { ReattemptInitialBroadcast(scheduler); }, delta);
838838
}
839839

840-
void PeerManager::FinalizeNode(NodeId nodeid, bool& fUpdateConnectionTime) {
840+
void PeerManager::FinalizeNode(const CNode& node, bool& fUpdateConnectionTime) {
841+
NodeId nodeid = node.GetId();
841842
fUpdateConnectionTime = false;
842843
LOCK(cs_main);
843844
int misbehavior{0};
@@ -854,7 +855,8 @@ void PeerManager::FinalizeNode(NodeId nodeid, bool& fUpdateConnectionTime) {
854855
if (state->fSyncStarted)
855856
nSyncStarted--;
856857

857-
if (misbehavior == 0 && state->fCurrentlyConnected) {
858+
if (misbehavior == 0 && state->fCurrentlyConnected && !node.IsBlockOnlyConn()) {
859+
// Note: we avoid changing visible addrman state for block-relay-only peers
858860
fUpdateConnectionTime = true;
859861
}
860862

src/net_processing.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class PeerManager final : public CValidationInterface, public NetEventsInterface
5858
/** Initialize a peer by adding it to mapNodeState and pushing a message requesting its version */
5959
void InitializeNode(CNode* pnode) override;
6060
/** Handle removal of a peer by updating various state and removing it from mapNodeState */
61-
void FinalizeNode(NodeId nodeid, bool& fUpdateConnectionTime) override;
61+
void FinalizeNode(const CNode& node, bool& fUpdateConnectionTime) override;
6262
/**
6363
* Process protocol messages received from a given node
6464
*

src/test/denialofservice_tests.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ BOOST_AUTO_TEST_CASE(outbound_slow_chain_eviction)
129129
SetMockTime(0);
130130

131131
bool dummy;
132-
peerLogic->FinalizeNode(dummyNode1.GetId(), dummy);
132+
peerLogic->FinalizeNode(dummyNode1, dummy);
133133
}
134134

135135
static void AddRandomOutboundPeer(std::vector<CNode *> &vNodes, PeerManager &peerLogic, CConnmanTest* connman)
@@ -211,7 +211,7 @@ BOOST_AUTO_TEST_CASE(stale_tip_peer_management)
211211

212212
bool dummy;
213213
for (const CNode *node : vNodes) {
214-
peerLogic->FinalizeNode(node->GetId(), dummy);
214+
peerLogic->FinalizeNode(*node, dummy);
215215
}
216216

217217
connman->ClearNodes();
@@ -259,8 +259,8 @@ BOOST_AUTO_TEST_CASE(peer_discouragement)
259259
BOOST_CHECK(banman->IsDiscouraged(addr2)); // to be discouraged now
260260

261261
bool dummy;
262-
peerLogic->FinalizeNode(dummyNode1.GetId(), dummy);
263-
peerLogic->FinalizeNode(dummyNode2.GetId(), dummy);
262+
peerLogic->FinalizeNode(dummyNode1, dummy);
263+
peerLogic->FinalizeNode(dummyNode2, dummy);
264264
}
265265

266266
BOOST_AUTO_TEST_CASE(DoS_bantime)
@@ -288,7 +288,7 @@ BOOST_AUTO_TEST_CASE(DoS_bantime)
288288
BOOST_CHECK(banman->IsDiscouraged(addr));
289289

290290
bool dummy;
291-
peerLogic->FinalizeNode(dummyNode.GetId(), dummy);
291+
peerLogic->FinalizeNode(dummyNode, dummy);
292292
}
293293

294294
static CTransactionRef RandomOrphan()

0 commit comments

Comments
 (0)