From: Pranav Bhalerao (prbhaler) Date: Thu, 28 Oct 2021 10:41:14 +0000 (+0000) Subject: Merge pull request #3136 in SNORT/snort3 from ~PRBHALER/snort3:sip to master X-Git-Tag: 3.1.16.0~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=43722e9d8833e509dc4addcdb22e1a78f6734289;p=thirdparty%2Fsnort3.git Merge pull request #3136 in SNORT/snort3 from ~PRBHALER/snort3:sip to master Squashed commit of the following: commit 6bd401c5853e4fbab89657ebd585b3eae74806de Author: Pranav Bhalerao Date: Wed Oct 27 17:26:38 2021 +0530 sip: track memory for sip sessions. --- diff --git a/src/service_inspectors/sip/sip.cc b/src/service_inspectors/sip/sip.cc index 32e1650f7..cd995c090 100644 --- a/src/service_inspectors/sip/sip.cc +++ b/src/service_inspectors/sip/sip.cc @@ -27,6 +27,7 @@ #include "events/event_queue.h" #include "log/messages.h" #include "managers/inspector_manager.h" +#include "memory/memory_cap.h" #include "profiler/profiler.h" #include "protocols/packet.h" #include "stream/stream_splitter.h" @@ -58,11 +59,13 @@ SipFlowData::~SipFlowData() FreeSipData(&session); assert(sip_stats.concurrent_sessions > 0); sip_stats.concurrent_sessions--; + memory::MemoryCap::update_deallocations(sizeof(SipFlowData)); } static SIPData* SetNewSIPData(Packet* p) { SipFlowData* fd = new SipFlowData; + memory::MemoryCap::update_allocations(sizeof(SipFlowData)); p->flow->set_flow_data(fd); return &fd->session; } diff --git a/src/service_inspectors/sip/sip_dialog.cc b/src/service_inspectors/sip/sip_dialog.cc index 5dac88df7..fa65fc4bd 100644 --- a/src/service_inspectors/sip/sip_dialog.cc +++ b/src/service_inspectors/sip/sip_dialog.cc @@ -410,6 +410,7 @@ static int SIP_ignoreChannels(SIP_DialogData* dialog, Packet* p, SIP_PROTO_CONF* { Stream::ignore_flow(p, p->flow->pkt_type, p->get_ip_proto_next(), &mdataA->maddress, mdataA->mport, &mdataB->maddress, mdataB->mport, SSN_DIR_BOTH, (new SipFlowData)); + memory::MemoryCap::update_allocations(sizeof(SipFlowData)); } sip_stats.ignoreChannels++; mdataA = mdataA->nextM; @@ -528,6 +529,7 @@ static SIP_DialogData* SIP_addDialog(SIPMsg* sipMsg, SIP_DialogData* currDialog, sip_stats.dialogs++; dialog = (SIP_DialogData*)snort_calloc(sizeof(SIP_DialogData)); + memory::MemoryCap::update_allocations(sizeof(SIP_DialogData)); // Add to the head dialog->nextD = currDialog; @@ -587,6 +589,7 @@ static int SIP_deleteDialog(SIP_DialogData* currDialog, SIP_DialogList* dList) } sip_freeMediaList(currDialog->mediaSessions); snort_free(currDialog); + memory::MemoryCap::update_deallocations(sizeof(SIP_DialogData)); if ( dList->num_dialogs > 0) dList->num_dialogs--; return true; @@ -683,6 +686,7 @@ void sip_freeDialogs(SIP_DialogList* list) nextNode = curNode->nextD; sip_freeMediaList(curNode->mediaSessions); snort_free(curNode); + memory::MemoryCap::update_deallocations(sizeof(SIP_DialogData)); curNode = nextNode; } } diff --git a/src/service_inspectors/sip/sip_parser.cc b/src/service_inspectors/sip/sip_parser.cc index b1441a183..4c3309406 100644 --- a/src/service_inspectors/sip/sip_parser.cc +++ b/src/service_inspectors/sip/sip_parser.cc @@ -27,6 +27,7 @@ #include "detection/detection_engine.h" #include "events/event_queue.h" +#include "memory/memory_cap.h" #include "utils/util.h" #include "utils/util_cstring.h" @@ -504,6 +505,7 @@ static bool sip_body_parse(SIPMsg* msg, const char* buff, const char* end, const // Create a media session msg->mediaSession = (SIP_MediaSession*)snort_calloc(sizeof(SIP_MediaSession)); + memory::MemoryCap::update_allocations(sizeof(SIP_MediaSession)); const char* start = buff; /* @@ -1128,6 +1130,7 @@ static int sip_parse_sdp_m(SIPMsg* msg, const char* start, const char* end) return SIP_PARSE_ERROR; mdata = (SIP_MediaData*)snort_calloc(sizeof(SIP_MediaData)); + memory::MemoryCap::update_allocations(sizeof(SIP_MediaData)); mdata->mport = (uint16_t)SnortStrtoul(spaceIndex + 1, &next, 10); if ((nullptr != next)&&('/'==next[0])) @@ -1253,10 +1256,14 @@ void sip_freeMediaSession(SIP_MediaSession* mediaSession) { nextNode = curNode->nextM; snort_free(curNode); + memory::MemoryCap::update_deallocations(sizeof(SIP_MediaData)); curNode = nextNode; } if (nullptr != mediaSession) + { snort_free(mediaSession); + memory::MemoryCap::update_deallocations(sizeof(SIP_MediaSession)); + } } /********************************************************************