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
(cherry picked from commit eaa83c0439c13b76525224267c23d0cf52a6668b)
This commit is contained in:
Jon Loeliger 2022-06-02 15:18:54 -05:00 committed by Andrew Yourtchenko
parent fa27d4d4f1
commit 9dac6f9675

View File

@ -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