tls: fix memory leak when client/server init error 07/38907/1
authorXiaoming Jiang <jiangxiaoming@outlook.com>
Fri, 26 May 2023 00:32:25 +0000 (00:32 +0000)
committerXiaoming Jiang <jiangxiaoming@outlook.com>
Fri, 26 May 2023 00:32:25 +0000 (00:32 +0000)
Type: fix
Signed-off-by: Xiaoming Jiang <jiangxiaoming@outlook.com>
Change-Id: I484f3759b6c27052e08741398ec389729285f035

src/vnet/tls/tls.c

index b082467..fb625c8 100644 (file)
@@ -463,6 +463,7 @@ tls_session_accept_callback (session_t * tls_session)
   session_t *tls_listener, *app_session;
   tls_ctx_t *lctx, *ctx;
   u32 ctx_handle;
+  int rv;
 
   tls_listener =
     listen_session_get_from_handle (tls_session->listener_handle);
@@ -489,7 +490,14 @@ tls_session_accept_callback (session_t * tls_session)
   TLS_DBG (1, "Accept on listener %u new connection [%u]%x",
           tls_listener->opaque, vlib_get_thread_index (), ctx_handle);
 
-  return tls_ctx_init_server (ctx);
+  rv = tls_ctx_init_server (ctx);
+  if (rv)
+    {
+      session_free (app_session);
+      tls_ctx_free (ctx);
+    }
+
+  return rv;
 }
 
 int
@@ -530,6 +538,7 @@ tls_session_connected_cb (u32 tls_app_index, u32 ho_ctx_index,
   tls_ctx_t *ho_ctx, *ctx;
   session_type_t st;
   u32 ctx_handle;
+  int rv;
 
   ho_ctx = tls_ctx_half_open_get (ho_ctx_index);
 
@@ -559,7 +568,14 @@ tls_session_connected_cb (u32 tls_app_index, u32 ho_ctx_index,
   app_session->session_type = st;
   app_session->connection_index = ctx->tls_ctx_handle;
 
-  return tls_ctx_init_client (ctx);
+  rv = tls_ctx_init_client (ctx);
+  if (rv)
+    {
+      session_free (app_session);
+      tls_ctx_free (ctx);
+    }
+
+  return rv;
 }
 
 int