From c428fd5d9476baba02edc0a10552719460e85b1e Mon Sep 17 00:00:00 2001 From: Steven Luong Date: Thu, 18 Aug 2022 13:20:30 -0700 Subject: [PATCH] vlib: memory leak in vlib_register_errors on create and delete interface format returns a vector which must be free or memory is leaked. From show memory 3716528 66716 0x7fffbfeb0db0 _vec_resize_internal + 0xe6 _vec_add + 0x164 do_percent + 0xb82 va_format + 0xb9 format + 0x156 vlib_register_errors + 0x76c setup_tx_node + 0x5c vnet_register_interface + 0xca6 vnet_eth_register_interface + 0xdd memif_create_if + 0x975 memif_create_command_fn + 0x461 vlib_cli_dispatch_sub_commands + 0xec8 (gdb) list *(vlib_register_errors + 0x76c) 0x7ffff6e8280c is in vlib_register_errors (/home/sluong/vpp/vpp/src/vlib/error.c:224). 219 220 vec_validate (nm->node_by_error, n->error_heap_index + n_errors - 1); 221 222 for (u32 i = 0; i < n_errors; i++) 223 { 224 t.format = (char *) format (0, "%v %s: %%d", n->name, cd[i].name); 225 vm->error_elog_event_types[n->error_heap_index + i] = t; 226 nm->node_by_error[n->error_heap_index + i] = n->index; 227 } Type: fix Signed-off-by: Steven Luong Change-Id: I2983f081b7e2c1b2d18d66afe45282933efbe127 --- src/vlib/error.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/vlib/error.c b/src/vlib/error.c index 7e72565d47f..de2020f08cb 100644 --- a/src/vlib/error.c +++ b/src/vlib/error.c @@ -222,6 +222,7 @@ vlib_register_errors (vlib_main_t *vm, u32 node_index, u32 n_errors, for (u32 i = 0; i < n_errors; i++) { t.format = (char *) format (0, "%v %s: %%d", n->name, cd[i].name); + vec_free (vm->error_elog_event_types[n->error_heap_index + i].format); vm->error_elog_event_types[n->error_heap_index + i] = t; nm->node_by_error[n->error_heap_index + i] = n->index; } -- 2.16.6