From: Damjan Marion Date: Wed, 8 Mar 2023 13:28:51 +0000 (+0000) Subject: memif: don't leak error strings in API handlers X-Git-Tag: v23.10-rc0~147 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=f6d3abd0d18038c872b1c91cad2631463dfe97ec;p=vpp.git memif: don't leak error strings in API handlers Type: fix Fixes: ab4d917 Change-Id: I226044f64e1577033798fd203a2e981c894830d6 Signed-off-by: Damjan Marion --- diff --git a/src/plugins/memif/memif_api.c b/src/plugins/memif/memif_api.c index 819350a6795..1a58e4c068d 100644 --- a/src/plugins/memif/memif_api.c +++ b/src/plugins/memif/memif_api.c @@ -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); diff --git a/src/vnet/api_errno.h b/src/vnet/api_errno.h index 60e48f4a779..52f201c081b 100644 --- a/src/vnet/api_errno.h +++ b/src/vnet/api_errno.h @@ -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 */ /*