Skip to content

Commit 2b0cd1f

Browse files
committed
Merge bitcoin/bitcoin#33395: net: do not apply whitelist permissions to onion inbounds
f563ce9 net: Do not apply whitelist permission to onion inbounds (Martin Zumsande) Pull request description: Tor inbound connections do not reveal the peer's actual network address. Do not apply whitelist permissions to them since address-based matching is ineffective. ACKs for top commit: darosior: ACK f563ce9 furszy: ACK f563ce9 vasild: ACK f563ce9 Tree-SHA512: 49ae70e382fc2f78b7073553fe649a6843a41214b2986ea7f77e285d02b7bd00fe0320a1b71d1aaca08713808fb14af058f0b1f19f19adb3a77b97cb9d3449ce
2 parents 947bed2 + f563ce9 commit 2b0cd1f

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

src/net.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -574,9 +574,9 @@ void CNode::CloseSocketDisconnect()
574574
m_i2p_sam_session.reset();
575575
}
576576

577-
void CConnman::AddWhitelistPermissionFlags(NetPermissionFlags& flags, const CNetAddr &addr, const std::vector<NetWhitelistPermissions>& ranges) const {
577+
void CConnman::AddWhitelistPermissionFlags(NetPermissionFlags& flags, std::optional<CNetAddr> addr, const std::vector<NetWhitelistPermissions>& ranges) const {
578578
for (const auto& subnet : ranges) {
579-
if (subnet.m_subnet.Match(addr)) {
579+
if (addr.has_value() && subnet.m_subnet.Match(addr.value())) {
580580
NetPermissions::AddFlag(flags, subnet.m_flags);
581581
}
582582
}
@@ -1768,7 +1768,11 @@ void CConnman::CreateNodeFromAcceptedSocket(std::unique_ptr<Sock>&& sock,
17681768
{
17691769
int nInbound = 0;
17701770

1771-
AddWhitelistPermissionFlags(permission_flags, addr, vWhitelistedRangeIncoming);
1771+
const bool inbound_onion = std::find(m_onion_binds.begin(), m_onion_binds.end(), addr_bind) != m_onion_binds.end();
1772+
1773+
// Tor inbound connections do not reveal the peer's actual network address.
1774+
// Therefore do not apply address-based whitelist permissions to them.
1775+
AddWhitelistPermissionFlags(permission_flags, inbound_onion ? std::optional<CNetAddr>{} : addr, vWhitelistedRangeIncoming);
17721776

17731777
{
17741778
LOCK(m_nodes_mutex);
@@ -1823,7 +1827,6 @@ void CConnman::CreateNodeFromAcceptedSocket(std::unique_ptr<Sock>&& sock,
18231827
NodeId id = GetNewNodeId();
18241828
uint64_t nonce = GetDeterministicRandomizer(RANDOMIZER_ID_LOCALHOSTNONCE).Write(id).Finalize();
18251829

1826-
const bool inbound_onion = std::find(m_onion_binds.begin(), m_onion_binds.end(), addr_bind) != m_onion_binds.end();
18271830
// The V2Transport transparently falls back to V1 behavior when an incoming V1 connection is
18281831
// detected, so use it whenever we signal NODE_P2P_V2.
18291832
ServiceFlags local_services = GetLocalServices();

src/net.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1377,7 +1377,7 @@ class CConnman
13771377

13781378
bool AttemptToEvictConnection();
13791379
CNode* ConnectNode(CAddress addrConnect, const char *pszDest, bool fCountFailure, ConnectionType conn_type, bool use_v2transport) EXCLUSIVE_LOCKS_REQUIRED(!m_unused_i2p_sessions_mutex);
1380-
void AddWhitelistPermissionFlags(NetPermissionFlags& flags, const CNetAddr &addr, const std::vector<NetWhitelistPermissions>& ranges) const;
1380+
void AddWhitelistPermissionFlags(NetPermissionFlags& flags, std::optional<CNetAddr> addr, const std::vector<NetWhitelistPermissions>& ranges) const;
13811381

13821382
void DeleteNode(CNode* pnode);
13831383

0 commit comments

Comments
 (0)