From 4f432bd738c420512a86a51ab3e00323f396b89e Mon Sep 17 00:00:00 2001 From: Vasil Dimov Date: Mon, 31 May 2021 18:07:40 +0200 Subject: net: do not connect to I2P hosts on port!=0 When connecting to an I2P host we don't specify destination port and it is being forced to 0 by the SAM 3.1 proxy, so if we connect to the same host on two different ports, that would be actually two connections to the same service (listening on port 0). Fixes https://github.com/bitcoin/bitcoin/issues/21389 --- src/i2p.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src') diff --git a/src/i2p.cpp b/src/i2p.cpp index dbd4d46baa..5e7e42fb77 100644 --- a/src/i2p.cpp +++ b/src/i2p.cpp @@ -172,6 +172,13 @@ bool Session::Accept(Connection& conn) bool Session::Connect(const CService& to, Connection& conn, bool& proxy_error) { + // Refuse connecting to arbitrary ports. We don't specify any destination port to the SAM proxy + // when connecting (SAM 3.1 does not use ports) and it forces/defaults it to I2P_SAM31_PORT. + if (to.GetPort() != I2P_SAM31_PORT) { + proxy_error = false; + return false; + } + proxy_error = true; std::string session_id; -- cgit v1.2.3