tcp: no longer abort SYN_SENT when receiving some ICMP
authorEric Dumazet <edumazet@google.com>
Tue, 14 Nov 2023 17:23:41 +0000 (17:23 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 16 Nov 2023 23:35:12 +0000 (23:35 +0000)
commit0a8de364ff7a14558e9676f424283148110384d6
treec173673d5fb2dc3dd62efba9e2cc6d4fc5b015a9
parent14dd92d0a1174d3fe052bf87a3ae3a6914946170
tcp: no longer abort SYN_SENT when receiving some ICMP

Currently, non fatal ICMP messages received on behalf
of SYN_SENT sockets do call tcp_ld_RTO_revert()
to implement RFC 6069, but immediately call tcp_done(),
thus aborting the connect() attempt.

This violates RFC 1122 following requirement:

4.2.3.9  ICMP Messages
...
          o    Destination Unreachable -- codes 0, 1, 5

                 Since these Unreachable messages indicate soft error
                 conditions, TCP MUST NOT abort the connection, and it
                 SHOULD make the information available to the
                 application.

This patch makes sure non 'fatal' ICMP[v6] messages do not
abort the connection attempt.

It enables RFC 6069 for SYN_SENT sockets as a result.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: David Morley <morleyd@google.com>
Cc: Neal Cardwell <ncardwell@google.com>
Cc: Yuchung Cheng <ycheng@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_ipv4.c
net/ipv6/tcp_ipv6.c