]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #2863 in SNORT/snort3 from ~SHRARANG/snort3:mem_accounting to...
authorShravan Rangarajuvenkata (shrarang) <shrarang@cisco.com>
Wed, 28 Apr 2021 17:20:29 +0000 (17:20 +0000)
committerShravan Rangarajuvenkata (shrarang) <shrarang@cisco.com>
Wed, 28 Apr 2021 17:20:29 +0000 (17:20 +0000)
Squashed commit of the following:

commit 272257dd20a103ff68536d5437387fc3eadbb39a
Author: Shravan Rangaraju <shrarang@cisco.com>
Date:   Fri Apr 23 13:32:32 2021 -0400

    appid: do memory accounting of api stash object, dns/tls/third-party sessions

19 files changed:
src/flow/stash_item.h
src/flow/test/flow_stash_test.cc
src/network_inspectors/appid/appid_discovery.cc
src/network_inspectors/appid/appid_dns_session.h
src/network_inspectors/appid/appid_ha.cc
src/network_inspectors/appid/appid_session.cc
src/network_inspectors/appid/appid_session.h
src/network_inspectors/appid/appid_session_api.h
src/network_inspectors/appid/detector_plugins/test/http_url_patterns_test.cc
src/network_inspectors/appid/test/appid_api_test.cc
src/network_inspectors/appid/test/appid_debug_test.cc
src/network_inspectors/appid/test/appid_detector_test.cc
src/network_inspectors/appid/test/appid_discovery_test.cc
src/network_inspectors/appid/test/appid_http_event_test.cc
src/network_inspectors/appid/test/appid_session_api_test.cc
src/network_inspectors/appid/test/service_state_test.cc
src/network_inspectors/appid/test/tp_mock.cc
src/network_inspectors/appid/tp_appid_session_api.h
src/network_inspectors/appid/tp_appid_utils.cc

index 8959dc32da139eb37ce07a3b4b62aae539c921c3..e022372bf900f8f11143b42accd64b19c09bfede 100644 (file)
@@ -24,6 +24,8 @@
 #include <cstdint>
 #include <string>
 
+#include "memory/memory_cap.h"
+
 #define STASH_APPID_DATA "appid_data"
 
 #define STASH_GENERIC_OBJECT_APPID 1
@@ -43,6 +45,8 @@ public:
     {
         return object_type;
     }
+    virtual size_t size_of() const = 0;
+
 private:
     int object_type;
 };
@@ -94,6 +98,7 @@ public:
     {
         type = STASH_ITEM_TYPE_GENERIC_OBJECT;
         val.generic_obj_val = obj;
+        memory::MemoryCap::update_allocations(sizeof(*this) + obj->size_of());
     }
 
     ~StashItem()
@@ -104,6 +109,7 @@ public:
             delete val.str_val;
             break;
         case STASH_ITEM_TYPE_GENERIC_OBJECT:
+            memory::MemoryCap::update_deallocations(sizeof(*this) + val.generic_obj_val->size_of());
             delete val.generic_obj_val;
         default:
             break;
index ee9e5faeeb610e0fb32966c0b578ef5ea839ccb1..f9a87c6bb2b7151f2aaed4690f09cbb39a75585b 100644 (file)
@@ -33,6 +33,9 @@ using namespace std;
 
 static DataBus* DB = nullptr;
 
+void memory::MemoryCap::update_allocations(size_t) { }
+void memory::MemoryCap::update_deallocations(size_t) { }
+
 class TestStashObject : public StashGenericObject
 {
 public:
@@ -40,6 +43,9 @@ public:
     {
 
     }
+
+    size_t size_of() const override
+    { return sizeof(*this); }
 };
 
 
index 95a7b2050e8495ba8383e13a299dee4bddeae636..c68ff86a309db309f2f0335724932200f1a093d9 100644 (file)
@@ -574,6 +574,7 @@ bool AppIdDiscovery::do_discovery(Packet* p, AppIdSession& asd, IpProtocol proto
         if (asd.tpsession and asd.tpsession->get_ctxt_version() != tp_appid_ctxt->get_version())
         {
             bool is_tp_done = asd.is_tp_processing_done();
+            memory::MemoryCap::update_deallocations(asd.tpsession->size_of());
             delete asd.tpsession;
             asd.tpsession = nullptr;
             if (!is_tp_done)
index 2ff1a4c9e4e8052e103ffa9e2bddcbb5d5198067..5b71f300a47d4c0b46edaf9b1b6a9be054ee856b 100644 (file)
 class AppIdDnsSession
 {
 public:
-    virtual ~AppIdDnsSession() = default;
+    AppIdDnsSession()
+    {
+        memory::MemoryCap::update_allocations(sizeof(*this));
+    }
+
+    ~AppIdDnsSession()
+    {
+        memory::MemoryCap::update_deallocations(sizeof(*this));
+    }
 
     void reset()
     {
index 56a6b5212d574734266e2a69ca3c2526f3f94093..dcf69d7501e2a1ea70600a616139f253cb359920 100644 (file)
@@ -112,7 +112,10 @@ bool AppIdHAAppsClient::consume(Flow*& flow, const FlowKey* key, HAMessage& msg,
             if ( !(asd->tpsession = tpsf(*asd->get_tp_appid_ctxt())) )
                 ErrorMessage("appid: Could not allocate asd.tpsession data in consume");
             else
+            {
+                memory::MemoryCap::update_allocations(asd->tpsession->size_of());
                 asd->tpsession->set_state(TP_STATE_HA);
+            }
         }
     }
 
index f3853c5818458074538d434e2cbabd50065269a0..d57c6422c2ec192e722af89aaf3a37ffe4ec3d24 100644 (file)
@@ -165,6 +165,7 @@ AppIdSession::~AppIdSession()
 
     if (tpsession)
     {
+        memory::MemoryCap::update_deallocations(tpsession->size_of());
         if (pkt_thread_tp_appid_ctxt and
             ((tpsession->get_ctxt_version() == pkt_thread_tp_appid_ctxt->get_version()) and
             !ThirdPartyAppIdContext::get_tp_reload_in_progress()))
index d6a295e6c66831ec938140da8ec0922bb13422ba..9fa368681ccf9aa30bac434512d7175450bfc9e7 100644 (file)
@@ -108,8 +108,14 @@ enum MatchedTlsType
 class TlsSession
 {
 public:
+    TlsSession()
+    {
+        memory::MemoryCap::update_allocations(sizeof(*this));
+    }
+
     ~TlsSession()
     {
+        memory::MemoryCap::update_deallocations(sizeof(*this));
         if (tls_host)
             snort_free(tls_host);
         if (tls_first_alt_name)
index 5e15565cdabba9b221147443751ae8102ba6a88d..585a78627081dd6da9046bdc9a7cd489f101587d 100644 (file)
@@ -152,6 +152,9 @@ public:
 
     void clear_user_logged_in() { user_logged_in = false; }
 
+    size_t size_of() const override
+    { return sizeof(*this); }
+
 protected:
     AppIdSessionApi(const AppIdSession* asd, const SfIp& ip);
 
index 1b43680b0c815dc9e50b8dd1ea0f2eda051791fa..fe652dfce3b4d7e7cf5ede980de4f087e393dbf9 100644 (file)
@@ -56,6 +56,9 @@ static AppId service_id = APP_ID_NONE;
 static AppId client_id = APP_ID_NONE;
 static DetectorHTTPPattern mpattern;
 
+void memory::MemoryCap::update_allocations(size_t) { }
+void memory::MemoryCap::update_deallocations(size_t) { }
+
 namespace snort
 {
 AppIdSessionApi::AppIdSessionApi(const AppIdSession*, const SfIp&) :
index fb610d982bb9e46407b664a495b130509981e52a..f16d04b2e1fd62d9b0e6a0fa55b9b36500f45486 100644 (file)
@@ -48,6 +48,9 @@ using namespace snort;
 
 static SnortProtocolId dummy_http2_protocol_id = 1;
 
+void memory::MemoryCap::update_allocations(size_t) { }
+void memory::MemoryCap::update_deallocations(size_t) { }
+
 namespace snort
 {
 
index 4ece9b2d1308b31160c3fd3ad95e9e6fd64d48c6..0b58e5db0472161c2513ad0a55a3fa43a74a9b1b 100644 (file)
@@ -37,6 +37,9 @@
 
 // Mocks
 
+void memory::MemoryCap::update_allocations(size_t) { }
+void memory::MemoryCap::update_deallocations(size_t) { }
+
 namespace snort
 {
 unsigned get_instance_id() { return 3; }
index 9a9edfe7d4893169c9f6186f7e15cdcd7206db18..85aaffffafe22b7b2b272f1f13d6a1697fe2aae7 100644 (file)
@@ -36,6 +36,9 @@
 #include <CppUTest/CommandLineTestRunner.h>
 #include <CppUTest/TestHarness.h>
 
+void memory::MemoryCap::update_allocations(size_t) { }
+void memory::MemoryCap::update_deallocations(size_t) { }
+
 namespace snort
 {
 AppIdSessionApi::AppIdSessionApi(const AppIdSession*, const SfIp&) :
index 8cdaa8dbedbf93d932d12a34e71aa00397347daf..be7a28dfd00cefa5b0e70947d51e55490fe86f60 100644 (file)
@@ -41,6 +41,9 @@
 
 uint32_t ThirdPartyAppIdContext::next_version = 0;
 
+void memory::MemoryCap::update_allocations(size_t) { }
+void memory::MemoryCap::update_deallocations(size_t) { }
+
 namespace snort
 {
 // Stubs for packet
index f51379bc187f4c8e752bde1d77e879d670cfdd4d..4aabe3b0c8bfe9b454bdb21798bf08ec12444e51 100644 (file)
@@ -49,6 +49,9 @@ void ApplicationDescriptor::set_id(const Packet&, AppIdSession&, AppidSessionDir
 
 using namespace snort;
 
+void memory::MemoryCap::update_allocations(size_t) { }
+void memory::MemoryCap::update_deallocations(size_t) { }
+
 namespace snort
 {
 AppIdApi appid_api;
index d818fcfd3d32de8b13da1447600ef30c7667f183..eff13f484a9d5796d402106a202c17ef718e12fa 100644 (file)
@@ -36,6 +36,9 @@ static AppIdConfig config;
 static OdpContext odpctxt(config, nullptr);
 static Flow flow;
 
+void memory::MemoryCap::update_allocations(size_t) { }
+void memory::MemoryCap::update_deallocations(size_t) { }
+
 void ApplicationDescriptor::set_id(const Packet&, AppIdSession&, AppidSessionDirection, AppId, AppidChangeBits&) { }
 void AppIdModule::reset_stats() {}
 
index c456d70d3008276835a64ba4491b643a67eaa0d1..881a65c2ad04c8410f730a823b92d39bbc3c751a 100644 (file)
@@ -28,6 +28,9 @@
 
 #include <vector>
 
+void memory::MemoryCap::update_allocations(size_t) { }
+void memory::MemoryCap::update_deallocations(size_t) { }
+
 namespace snort
 {
 // Stubs for logs
index 29db0b6920bced1df6af5126efa28ea3c5064a74..4427d362d17c1d7ff63127e10e818c8a2caae343 100644 (file)
@@ -80,6 +80,7 @@ public:
     void clear_attr(TPSessionAttr attr) override { flags &= ~attr; }
     void set_attr(TPSessionAttr attr) override { flags |= attr; }
     unsigned get_attr(TPSessionAttr attr) override { return flags & attr; }
+    size_t size_of() const override { return sizeof(*this); }
 
 private:
     unsigned flags = 0;
index 31fa64252738038d3214178869aa3cdc889577d1..f7a3c944384b6699cdfce1486b835f85106a2b43 100644 (file)
@@ -42,6 +42,7 @@ public:
     {
         ctxt_version = ctxt.get_version();
     }
+
     virtual ~ThirdPartyAppIdSession() = default;
 
     virtual void reset() = 0;            // just reset state
@@ -57,6 +58,7 @@ public:
     virtual void clear_attr(TPSessionAttr) = 0;
     virtual void set_attr(TPSessionAttr) = 0;
     virtual unsigned get_attr(TPSessionAttr) = 0;
+    virtual size_t size_of() const = 0;
     virtual AppId get_appid(int& conf) { conf=confidence; return appid; }
     virtual const ThirdPartyAppIdContext& get_ctxt() const
     { return ctxt; }
index a588800c6cb66859865fe558487fe16815152e10..72f49c122453d9f8a866a4f4c049715881f85bb6 100644 (file)
@@ -578,6 +578,7 @@ bool do_tp_discovery(ThirdPartyAppIdContext& tp_appid_ctxt, AppIdSession& asd, I
             ErrorMessage("Could not allocate asd.tpsession data");
             return false;
         }
+        memory::MemoryCap::update_allocations(asd.tpsession->size_of());
     }
 
     int tp_confidence;