]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #3136 in SNORT/snort3 from ~PRBHALER/snort3:sip to master
authorPranav Bhalerao (prbhaler) <prbhaler@cisco.com>
Thu, 28 Oct 2021 10:41:14 +0000 (10:41 +0000)
committerPranav Bhalerao (prbhaler) <prbhaler@cisco.com>
Thu, 28 Oct 2021 10:41:14 +0000 (10:41 +0000)
Squashed commit of the following:

commit 6bd401c5853e4fbab89657ebd585b3eae74806de
Author: Pranav Bhalerao <prbhaler@cisco.com>
Date:   Wed Oct 27 17:26:38 2021 +0530

    sip: track memory for sip sessions.

src/service_inspectors/sip/sip.cc
src/service_inspectors/sip/sip_dialog.cc
src/service_inspectors/sip/sip_parser.cc

index 32e1650f7d908c358eed04a0788d34d8f830a05b..cd995c0901760b7b7c1836a90a073840304ad25e 100644 (file)
@@ -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;
 }
index 5dac88df7f7a35bfdc0c2819207a00f704c717b0..fa65fc4bd4b2611dee9958c8d492465d190aa7fe 100644 (file)
@@ -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;
     }
 }
index b1441a183b81c44d7c34b567444c73d973ecafa3..4c33094065cda3d917438d4316cab78771f21db0 100644 (file)
@@ -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));
+    }
 }
 
 /********************************************************************