From 9fefa89169d296bff41a815fbefed2b41b1a4bb8 Mon Sep 17 00:00:00 2001 From: Ivan Shvedunov Date: Mon, 27 Jul 2020 19:59:38 +0300 Subject: [PATCH] tcp: fix tcp_connection_cleanup() with uninitialized elog This fixes TCP connection cleanup crash when TCP debugging is enabled. It could happen if session_stream_accept() returned an error. Type: fix Signed-off-by: Ivan Shvedunov Change-Id: I0df08969d82bb0f44def81b9e47195bd15502831 --- src/vnet/tcp/tcp_input.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/vnet/tcp/tcp_input.c b/src/vnet/tcp/tcp_input.c index b8c889ee1cc..8efe0c5a77a 100644 --- a/src/vnet/tcp/tcp_input.c +++ b/src/vnet/tcp/tcp_input.c @@ -2630,6 +2630,13 @@ tcp46_listen_inline (vlib_main_t * vm, vlib_node_runtime_t * node, tcp_connection_init_vars (child); child->rto = TCP_RTO_MIN; + /* + * This initializes elog track, must be done before synack. + * We also do it before possible tcp_connection_cleanup() as it + * generates TCP_EVT_DELETE event. + */ + TCP_EVT (TCP_EVT_SYN_RCVD, child, 1); + if (session_stream_accept (&child->connection, lc->c_s_index, lc->c_thread_index, 0 /* notify */ )) { @@ -2640,9 +2647,6 @@ tcp46_listen_inline (vlib_main_t * vm, vlib_node_runtime_t * node, child->tx_fifo_size = transport_tx_fifo_size (&child->connection); - /* This initializes elog track, must be done before synack */ - TCP_EVT (TCP_EVT_SYN_RCVD, child, 1); - tcp_send_synack (child); done: -- 2.16.6