From 6a8dbf9b9352db48580cd81c8dac027f3138fedf Mon Sep 17 00:00:00 2001 From: frankomosh Date: Thu, 15 Jan 2026 11:17:18 +0300 Subject: [PATCH] p2p: add validation check for initial self-announcement The direct send path for the initial self-announcement was bypassing IsAddrCompatible() check that PushAddress() performs --- src/net_processing.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/net_processing.cpp b/src/net_processing.cpp index 1202eaf1525..d7bfaed8798 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -5521,11 +5521,13 @@ void PeerManagerImpl::MaybeSendAddr(CNode& node, Peer& peer, std::chrono::micros // Send the initial self-announcement in its own message. This makes sure // rate-limiting with limited start-tokens doesn't ignore it if the first // message ends up containing multiple addresses. - std::vector self_announcement {local_addr}; - if (peer.m_wants_addrv2) { - MakeAndPushMessage(node, NetMsgType::ADDRV2, CAddress::V2_NETWORK(self_announcement)); - } else { - MakeAndPushMessage(node, NetMsgType::ADDR, CAddress::V1_NETWORK(self_announcement)); + if (IsAddrCompatible(peer, local_addr)) { + std::vector self_announcement{local_addr}; + if (peer.m_wants_addrv2) { + MakeAndPushMessage(node, NetMsgType::ADDRV2, CAddress::V2_NETWORK(self_announcement)); + } else { + MakeAndPushMessage(node, NetMsgType::ADDR, CAddress::V1_NETWORK(self_announcement)); + } } } else { // All later self-announcements are sent together with the other addresses.