From: Vladislav Grishenko Date: Wed, 29 Dec 2021 09:30:32 +0000 (+0500) Subject: vlib: mitigate outdated new cli session events X-Git-Tag: v22.10-rc0~229 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F22%2F35722%2F2;p=vpp.git vlib: mitigate outdated new cli session events Possible races while concurrent additon to the new sessions vector in a one process and remove from it in an another need to be avoided. Let the vector be changed in the new session process function only. Also cli_file_pool element may be freed already at the new session event arrive timepoint, still causing unexpected cli banner for noninteracive cli sessions. Type: fix Fixes: 17a67218587d40541ff522c6a86f354720481fbb Signed-off-by: Vladislav Grishenko Change-Id: I022d16dd3aad9c9330834d35c58938f04b015b08 --- diff --git a/src/vlib/unix/cli.c b/src/vlib/unix/cli.c index e6f549b776f..03baf3e58c1 100644 --- a/src/vlib/unix/cli.c +++ b/src/vlib/unix/cli.c @@ -1312,6 +1312,10 @@ unix_cli_new_session_process (vlib_main_t * vm, vlib_node_runtime_t * rt, /* Add an identifier to the new session list */ unix_cli_new_session_t ns; + /* Check the connection didn't close already */ + if (pool_is_free_index (cm->cli_file_pool, event_data[0])) + break; + ns.cf_index = event_data[0]; ns.deadline = vlib_time_now (vm) + 1.0; @@ -2693,7 +2697,7 @@ unix_cli_kill (unix_cli_main_t * cm, uword cli_file_index) if (ns->cf_index == cli_file_index) { - vec_del1 (cm->new_sessions, i); + ns->cf_index = ~0; break; } }