From: Lukas Sismis Date: Fri, 20 May 2022 19:33:38 +0000 (+0200) Subject: bypass: fix memory leak - reassign of FlowBypassInfo X-Git-Tag: suricata-7.0.0-beta1~481 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=05797c45bb5bb8b23a7af3dea2aa794c6f33e02d;p=thirdparty%2Fsuricata.git bypass: fix memory leak - reassign of FlowBypassInfo In some situations bypass callback is called on already bypassed flow. This allocates FlowBypassInfo structure for the flow but does not check if the flow already has one. Issue: #5368 --- diff --git a/src/decode.c b/src/decode.c index d277d2beff..e837502651 100644 --- a/src/decode.c +++ b/src/decode.c @@ -452,11 +452,17 @@ void PacketBypassCallback(Packet *p) (state == FLOW_STATE_CAPTURE_BYPASSED)) { return; } - FlowBypassInfo *fc = SCCalloc(sizeof(FlowBypassInfo), 1); - if (fc) { - FlowSetStorageById(p->flow, GetFlowBypassInfoID(), fc); - } else { - return; + + FlowBypassInfo *fc; + + fc = FlowGetStorageById(p->flow, GetFlowBypassInfoID()); + if (fc == NULL) { + fc = SCCalloc(sizeof(FlowBypassInfo), 1); + if (fc) { + FlowSetStorageById(p->flow, GetFlowBypassInfoID(), fc); + } else { + return; + } } } if (p->BypassPacketsFlow && p->BypassPacketsFlow(p)) {