glozow 35dddbccf1
Merge bitcoin/bitcoin#30394: net: fix race condition in self-connect detection
16bd283b3ad05daa41259a062aee0fc05b463fa6 Reapply "test: p2p: check that connecting to ourself leads to disconnect" (Sebastian Falbesoner)
0dbcd4c14855fe2cba15a32245572b693dc18c4e net: prevent sending messages in `NetEventsInterface::InitializeNode` (Sebastian Falbesoner)
66673f1c1302c986e344c7f44bb0b352213d5dc8 net: fix race condition in self-connect detection (Sebastian Falbesoner)

Pull request description:

  This PR fixes a recently discovered race condition in the self-connect detection (see #30362 and #30368).

  Initiating an outbound network connection currently involves the following steps after the socket connection is established (see [`CConnman::OpenNetworkConnection`](bd5d1688b4/src/net.cpp (L2923-L2930)) method):
  1. set up node state
  2. queue VERSION message (both steps 1 and 2 happen in [`InitializeNode`](bd5d1688b4/src/net_processing.cpp (L1662-L1683)))
  3. add new node to vector `m_nodes`

  If we connect to ourself, it can happen that the sent VERSION message (step 2) is received and processed locally *before* the node object is added to the connection manager's `m_nodes` vector (step 3). In this case, the self-connect remains undiscovered, as the detection doesn't find the outbound peer in `m_nodes` yet (see `CConnman::CheckIncomingNonce`).

  Fix this by swapping the order of 2. and 3., by taking the `PushNodeVersion` call out of `InitializeNode` and doing that in the `SendMessages` method instead, which is only called for `CNode` instances in `m_nodes`.

  The temporarily reverted test introduced in #30362 is readded. Fixes #30368.

  Thanks go to vasild, mzumsande and dergoegge for suggestions on how to fix this (see https://github.com/bitcoin/bitcoin/issues/30368#issuecomment-2200625017 ff. and https://github.com/bitcoin/bitcoin/pull/30394#discussion_r1668290789).

ACKs for top commit:
  naiyoma:
    tested ACK [16bd283b3a),  built and tested locally,  test passes successfully.
  mzumsande:
    ACK 16bd283b3ad05daa41259a062aee0fc05b463fa6
  tdb3:
    ACK 16bd283b3ad05daa41259a062aee0fc05b463fa6
  glozow:
    ACK 16bd283b3ad05daa41259a062aee0fc05b463fa6
  dergoegge:
    ACK 16bd283b3ad05daa41259a062aee0fc05b463fa6

Tree-SHA512: 5b8aced6cda8deb38d4cd3fe4980b8af505d37ffa0925afaa734c5d81efe9d490dc48a42e1d0d45dd2961c0e1172a3d5b6582ae9a2d642f2592a17fbdc184445
2024-07-16 09:40:53 +01:00
..
2024-07-08 11:12:01 +02:00
2024-07-08 11:12:01 +02:00
2024-06-18 18:47:51 +02:00
2024-07-08 11:12:01 +02:00
2024-07-08 11:12:01 +02:00
2023-10-12 11:27:19 +02:00
2024-04-10 17:01:27 +02:00
2024-06-13 11:20:49 +01:00
2024-07-08 11:12:01 +02:00
2024-03-04 19:53:30 -05:00
2024-07-08 11:12:01 +02:00
2023-12-11 18:22:13 +01:00
2024-07-08 11:12:01 +02:00
2023-11-16 11:36:22 +10:00
2023-09-13 11:37:45 +01:00
2024-05-20 16:48:19 +00:00
2024-07-08 11:12:01 +02:00
2024-07-08 11:12:01 +02:00
2024-05-14 10:24:31 +02:00
2024-05-14 10:24:31 +02:00
2024-07-08 11:12:01 +02:00
2024-04-01 14:37:24 -04:00
2024-07-08 11:12:01 +02:00
2024-07-08 11:12:01 +02:00
2023-11-16 11:36:22 +10:00