diff options
author | Steven Luong <sluong@cisco.com> | 2022-08-18 13:20:30 -0700 |
---|---|---|
committer | Matthew Smith <mgsmith@netgate.com> | 2022-08-19 15:06:42 +0000 |
commit | c428fd5d9476baba02edc0a10552719460e85b1e (patch) | |
tree | 568c81b469d0950fec4ef22bf41fa77c25cddf4d /src | |
parent | 6f1eb484c85cfdb091cbef18252a02b3310b9aae (diff) |
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 <sluong@cisco.com>
Change-Id: I2983f081b7e2c1b2d18d66afe45282933efbe127
Diffstat (limited to 'src')
-rw-r--r-- | src/vlib/error.c | 1 |
1 files changed, 1 insertions, 0 deletions
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; } |