memif: don't leak error strings in API handlers 45/38445/2
authorDamjan Marion <damarion@cisco.com>
Wed, 8 Mar 2023 13:28:51 +0000 (13:28 +0000)
committerDave Wallace <dwallacelf@gmail.com>
Tue, 14 Mar 2023 15:59:31 +0000 (15:59 +0000)
Type: fix
Fixes: ab4d917
Change-Id: I226044f64e1577033798fd203a2e981c894830d6
Signed-off-by: Damjan Marion <damarion@cisco.com>
src/plugins/memif/memif_api.c
src/vnet/api_errno.h

index 819350a..1a58e4c 100644 (file)
@@ -65,7 +65,7 @@ void
   /* socket filename */
   mp->socket_filename[ARRAY_LEN (mp->socket_filename) - 1] = 0;
 
-  rv = vnet_api_error (memif_socket_filename_add_del (
+  rv = vnet_get_api_error_and_free (memif_socket_filename_add_del (
     is_add, socket_id, (char *) mp->socket_filename));
 
 reply:
@@ -99,7 +99,7 @@ vl_api_memif_socket_filename_add_del_v2_t_handler (
   if (mp->is_add && socket_id == (u32) ~0)
     socket_id = memif_get_unused_socket_id ();
 
-  rv = vnet_api_error (
+  rv = vnet_get_api_error_and_free (
     memif_socket_filename_add_del (mp->is_add, socket_id, socket_filename));
 
   vec_free (socket_filename);
@@ -190,7 +190,7 @@ vl_api_memif_create_t_handler (vl_api_memif_create_t * mp)
       args.hw_addr_set = 1;
     }
 
-  rv = vnet_api_error (memif_create_if (vm, &args));
+  rv = vnet_get_api_error_and_free (memif_create_if (vm, &args));
 
   vec_free (args.secret);
 
@@ -227,7 +227,7 @@ vl_api_memif_delete_t_handler (vl_api_memif_delete_t * mp)
   else
     {
       mif = pool_elt_at_index (mm->interfaces, hi->dev_instance);
-      rv = vnet_api_error (memif_delete_if (vm, mif));
+      rv = vnet_get_api_error_and_free (memif_delete_if (vm, mif));
     }
 
   REPLY_MACRO (VL_API_MEMIF_DELETE_REPLY);
index 60e48f4..52f201c 100644 (file)
@@ -42,6 +42,14 @@ vnet_api_error (clib_error_t *err)
   return err->code;
 }
 
+static_always_inline vnet_api_error_t
+vnet_get_api_error_and_free (clib_error_t *err)
+{
+  vnet_api_error_t rv = vnet_api_error (err);
+  clib_error_free (err);
+  return rv;
+}
+
 #endif /* included_vnet_api_errno_h */
 
 /*