aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet
diff options
context:
space:
mode:
authorJon Loeliger <jdl@netgate.com>2022-06-02 15:18:54 -0500
committerJon Loeliger <jdl@netgate.com>2022-06-02 15:27:53 -0500
commiteaa83c0439c13b76525224267c23d0cf52a6668b (patch)
tree1a4b1a9e8e42c3be942704f70a3765ebe4fff723 /src/vnet
parent512223490a247d792c27f3bfe6ffe49e6dfb71fa (diff)
ipfix-export: Fix frame leak in flow_report_process_send()
The flow_report_process_send() function always allocates a frame. However, when no template_send is needed, template_bi is ~0. When this happens, no vectors are placed in the frame. When the frame is then "put", a check for n_vectors == 0 prevents the frame from actually being placed back on the free list. Fix that by using a direct call to vlib_frame_free() when there are no frame vctors. Type: fix Signed-off-by: Jon Loeliger <jdl@netgate.com> Change-Id: I936b5cea4cb3c358247c3d2e1a77d034a322ea76
Diffstat (limited to 'src/vnet')
-rw-r--r--src/vnet/ipfix-export/flow_report.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/vnet/ipfix-export/flow_report.c b/src/vnet/ipfix-export/flow_report.c
index 9d21d8b046d..cf23ccd7815 100644
--- a/src/vnet/ipfix-export/flow_report.c
+++ b/src/vnet/ipfix-export/flow_report.c
@@ -479,7 +479,15 @@ flow_report_process_send (vlib_main_t *vm, flow_report_main_t *frm,
nf = fr->flow_data_callback (frm, exp, fr, nf, to_next, next_node);
if (nf)
- vlib_put_frame_to_node (vm, next_node, nf);
+ {
+ if (nf->n_vectors)
+ vlib_put_frame_to_node (vm, next_node, nf);
+ else
+ {
+ vlib_node_runtime_t *rt = vlib_node_get_runtime (vm, next_node);
+ vlib_frame_free (vm, rt, nf);
+ }
+ }
}
static uword