Page MenuHomeFreeBSD

tcp: fix simultaneous open and refine e80062a2d43
ClosedPublic

Authored by glebius on Sep 21 2022, 3:24 AM.
Tags
None
Referenced Files
Unknown Object (File)
Dec 20 2023, 7:30 AM
Unknown Object (File)
Dec 12 2023, 2:26 AM
Unknown Object (File)
Nov 30 2023, 4:23 AM
Unknown Object (File)
Oct 20 2023, 10:35 PM
Unknown Object (File)
Oct 17 2023, 8:57 PM
Unknown Object (File)
Oct 17 2023, 8:56 PM
Unknown Object (File)
Oct 17 2023, 8:55 PM
Unknown Object (File)
Aug 14 2023, 4:38 PM
Subscribers

Details

Summary
  • The soisconnected() call on transition from SYN_RCVD to ESTABLISHED is also necessary for a half-synchronized connection. Fix that just setting the flag, when we transfer SYN-SENT -> SYN-RECEIVED.
  • Provide a comment that explains at what conditions the call to soisconnected() is necessary.
  • Hence mechanically rename the TF_INCQUEUE flag to TF_SONOTCONN.
  • Extend the change to the BBR and RACK stacks.

Note: the interaction between the accept_filter(9) and the socket layer
is not fully consistent, yet. For most accept filters this call to
soisconnected() will not move the connection from the incomplete queue
to the complete. The move would happen only when the filter has received
the desired data, and soisconnected() would be called once again from
sorwakeup(). Ideally, we should mark socket as connected only there,
and leave the soisconnected() from SYN_RCVD->ESTABLISHED only for the
simultaneous open case. However, this doesn't yet work.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Skipped
Unit
Tests Skipped
Build Status
Buildable 47464
Build 44351: arc lint + arc unit