tcp: handle multiple syns in time-wait 16/41816/2
authorFlorin Coras <[email protected]>
Sun, 10 Nov 2024 20:45:47 +0000 (15:45 -0500)
committerDave Barach <[email protected]>
Mon, 11 Nov 2024 17:58:38 +0000 (17:58 +0000)
If multiple syns are received in one dispatch for the same time-wait
connection, the first removes the connection while subsequent packets
either lookup a nonexistent or an unrelated connection.

Avoid the former with a check.

Type: fix

Change-Id: Ia5f1b3bbd568566eaf36121206aa12363a15b418
Signed-off-by: Florin Coras <[email protected]>
src/vnet/tcp/tcp_input.c

index 70b5d28..cd3e4b7 100644 (file)
@@ -2551,7 +2551,7 @@ tcp46_listen_inline (vlib_main_t *vm, vlib_node_runtime_t *node,
          tcp_connection_t *tc;
          tc = tcp_connection_get (vnet_buffer (b[0])->tcp.connection_index,
                                   thread_index);
-         if (tc->state != TCP_STATE_TIME_WAIT)
+         if (!tc || tc->state != TCP_STATE_TIME_WAIT)
            {
              tcp_inc_counter (listen, TCP_ERROR_CREATE_EXISTS, 1);
              goto done;