session: extra checks in session validation 23/23523/4
authorSrikanth Akula <srakula@cisco.com>
Mon, 18 Nov 2019 19:49:58 +0000 (11:49 -0800)
committerFlorin Coras <florin.coras@gmail.com>
Mon, 18 Nov 2019 23:48:00 +0000 (23:48 +0000)
Type: fix

Adding few extra checks while doign session validationwq!

Signed-off-by: Srikanth Akula <srakula@cisco.com>
Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: I4d18b5ad97d1802ce38a07aeb56b5f35939c1187

src/vnet/session/session.c
src/vnet/session/session.h
src/vnet/tls/tls.c

index 163f4d2..0751739 100644 (file)
@@ -205,6 +205,32 @@ session_free (session_t * s)
   pool_put (session_main.wrk[s->thread_index].sessions, s);
 }
 
+u8
+session_is_valid (u32 si, u8 thread_index)
+{
+  session_t *s;
+  transport_connection_t *tc;
+
+  s = pool_elt_at_index (session_main.wrk[thread_index].sessions, si);
+
+  if (!s)
+    return 1;
+
+  if (s->thread_index != thread_index || s->session_index != si)
+    return 0;
+
+  if (s->session_state == SESSION_STATE_TRANSPORT_DELETED
+      || s->session_state <= SESSION_STATE_LISTENING)
+    return 1;
+
+  tc = session_get_transport (s);
+  if (s->connection_index != tc->c_index
+      || s->thread_index != tc->thread_index || tc->s_index != si)
+    return 0;
+
+  return 1;
+}
+
 static void
 session_cleanup_notify (session_t * s, session_cleanup_ntf_t ntf)
 {
index e239818..7b7addb 100644 (file)
@@ -286,22 +286,10 @@ session_evt_alloc_old (session_worker_t * wrk)
   return elt;
 }
 
-always_inline u8
-session_is_valid (u32 si, u8 thread_index)
-{
-  session_t *s;
-  s = pool_elt_at_index (session_main.wrk[thread_index].sessions, si);
-  if (s->session_state == SESSION_STATE_CLOSED)
-    return 1;
-
-  if (s->thread_index != thread_index || s->session_index != si)
-    return 0;
-  return 1;
-}
-
 session_t *session_alloc (u32 thread_index);
 void session_free (session_t * s);
 void session_free_w_fifos (session_t * s);
+u8 session_is_valid (u32 si, u8 thread_index);
 
 always_inline session_t *
 session_get (u32 si, u32 thread_index)
index 166ec1d..cfe2c3a 100644 (file)
@@ -428,7 +428,7 @@ tls_session_accept_callback (session_t * tls_session)
   /* Preallocate app session. Avoids allocating a session post handshake
    * on tls_session rx and potentially invalidating the session pool */
   app_session = session_alloc (ctx->c_thread_index);
-  app_session->session_state = SESSION_STATE_CLOSED;
+  app_session->session_state = SESSION_STATE_CREATED;
   ctx->c_s_index = app_session->session_index;
 
   TLS_DBG (1, "Accept on listener %u new connection [%u]%x",
@@ -495,7 +495,7 @@ tls_session_connected_callback (u32 tls_app_index, u32 ho_ctx_index,
   /* Preallocate app session. Avoids allocating a session post handshake
    * on tls_session rx and potentially invalidating the session pool */
   app_session = session_alloc (ctx->c_thread_index);
-  app_session->session_state = SESSION_STATE_CLOSED;
+  app_session->session_state = SESSION_STATE_CREATED;
   ctx->c_s_index = app_session->session_index;
 
   return tls_ctx_init_client (ctx);