From: Shravan Rangarajuvenkata (shrarang) Date: Wed, 28 Apr 2021 17:20:29 +0000 (+0000) Subject: Merge pull request #2863 in SNORT/snort3 from ~SHRARANG/snort3:mem_accounting to... X-Git-Tag: 3.1.5.0~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=15ca8b7dbe94321c58e6cc89c8a563857c78d602;p=thirdparty%2Fsnort3.git Merge pull request #2863 in SNORT/snort3 from ~SHRARANG/snort3:mem_accounting to master Squashed commit of the following: commit 272257dd20a103ff68536d5437387fc3eadbb39a Author: Shravan Rangaraju Date: Fri Apr 23 13:32:32 2021 -0400 appid: do memory accounting of api stash object, dns/tls/third-party sessions --- diff --git a/src/flow/stash_item.h b/src/flow/stash_item.h index 8959dc32d..e022372bf 100644 --- a/src/flow/stash_item.h +++ b/src/flow/stash_item.h @@ -24,6 +24,8 @@ #include #include +#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; diff --git a/src/flow/test/flow_stash_test.cc b/src/flow/test/flow_stash_test.cc index ee9e5faee..f9a87c6bb 100644 --- a/src/flow/test/flow_stash_test.cc +++ b/src/flow/test/flow_stash_test.cc @@ -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); } }; diff --git a/src/network_inspectors/appid/appid_discovery.cc b/src/network_inspectors/appid/appid_discovery.cc index 95a7b2050..c68ff86a3 100644 --- a/src/network_inspectors/appid/appid_discovery.cc +++ b/src/network_inspectors/appid/appid_discovery.cc @@ -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) diff --git a/src/network_inspectors/appid/appid_dns_session.h b/src/network_inspectors/appid/appid_dns_session.h index 2ff1a4c9e..5b71f300a 100644 --- a/src/network_inspectors/appid/appid_dns_session.h +++ b/src/network_inspectors/appid/appid_dns_session.h @@ -31,7 +31,15 @@ class AppIdDnsSession { public: - virtual ~AppIdDnsSession() = default; + AppIdDnsSession() + { + memory::MemoryCap::update_allocations(sizeof(*this)); + } + + ~AppIdDnsSession() + { + memory::MemoryCap::update_deallocations(sizeof(*this)); + } void reset() { diff --git a/src/network_inspectors/appid/appid_ha.cc b/src/network_inspectors/appid/appid_ha.cc index 56a6b5212..dcf69d750 100644 --- a/src/network_inspectors/appid/appid_ha.cc +++ b/src/network_inspectors/appid/appid_ha.cc @@ -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); + } } } diff --git a/src/network_inspectors/appid/appid_session.cc b/src/network_inspectors/appid/appid_session.cc index f3853c581..d57c6422c 100644 --- a/src/network_inspectors/appid/appid_session.cc +++ b/src/network_inspectors/appid/appid_session.cc @@ -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())) diff --git a/src/network_inspectors/appid/appid_session.h b/src/network_inspectors/appid/appid_session.h index d6a295e6c..9fa368681 100644 --- a/src/network_inspectors/appid/appid_session.h +++ b/src/network_inspectors/appid/appid_session.h @@ -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) diff --git a/src/network_inspectors/appid/appid_session_api.h b/src/network_inspectors/appid/appid_session_api.h index 5e15565cd..585a78627 100644 --- a/src/network_inspectors/appid/appid_session_api.h +++ b/src/network_inspectors/appid/appid_session_api.h @@ -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); diff --git a/src/network_inspectors/appid/detector_plugins/test/http_url_patterns_test.cc b/src/network_inspectors/appid/detector_plugins/test/http_url_patterns_test.cc index 1b43680b0..fe652dfce 100644 --- a/src/network_inspectors/appid/detector_plugins/test/http_url_patterns_test.cc +++ b/src/network_inspectors/appid/detector_plugins/test/http_url_patterns_test.cc @@ -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&) : diff --git a/src/network_inspectors/appid/test/appid_api_test.cc b/src/network_inspectors/appid/test/appid_api_test.cc index fb610d982..f16d04b2e 100644 --- a/src/network_inspectors/appid/test/appid_api_test.cc +++ b/src/network_inspectors/appid/test/appid_api_test.cc @@ -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 { diff --git a/src/network_inspectors/appid/test/appid_debug_test.cc b/src/network_inspectors/appid/test/appid_debug_test.cc index 4ece9b2d1..0b58e5db0 100644 --- a/src/network_inspectors/appid/test/appid_debug_test.cc +++ b/src/network_inspectors/appid/test/appid_debug_test.cc @@ -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; } diff --git a/src/network_inspectors/appid/test/appid_detector_test.cc b/src/network_inspectors/appid/test/appid_detector_test.cc index 9a9edfe7d..85aaffffa 100644 --- a/src/network_inspectors/appid/test/appid_detector_test.cc +++ b/src/network_inspectors/appid/test/appid_detector_test.cc @@ -36,6 +36,9 @@ #include #include +void memory::MemoryCap::update_allocations(size_t) { } +void memory::MemoryCap::update_deallocations(size_t) { } + namespace snort { AppIdSessionApi::AppIdSessionApi(const AppIdSession*, const SfIp&) : diff --git a/src/network_inspectors/appid/test/appid_discovery_test.cc b/src/network_inspectors/appid/test/appid_discovery_test.cc index 8cdaa8dbe..be7a28dfd 100644 --- a/src/network_inspectors/appid/test/appid_discovery_test.cc +++ b/src/network_inspectors/appid/test/appid_discovery_test.cc @@ -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 diff --git a/src/network_inspectors/appid/test/appid_http_event_test.cc b/src/network_inspectors/appid/test/appid_http_event_test.cc index f51379bc1..4aabe3b0c 100644 --- a/src/network_inspectors/appid/test/appid_http_event_test.cc +++ b/src/network_inspectors/appid/test/appid_http_event_test.cc @@ -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; diff --git a/src/network_inspectors/appid/test/appid_session_api_test.cc b/src/network_inspectors/appid/test/appid_session_api_test.cc index d818fcfd3..eff13f484 100644 --- a/src/network_inspectors/appid/test/appid_session_api_test.cc +++ b/src/network_inspectors/appid/test/appid_session_api_test.cc @@ -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() {} diff --git a/src/network_inspectors/appid/test/service_state_test.cc b/src/network_inspectors/appid/test/service_state_test.cc index c456d70d3..881a65c2a 100644 --- a/src/network_inspectors/appid/test/service_state_test.cc +++ b/src/network_inspectors/appid/test/service_state_test.cc @@ -28,6 +28,9 @@ #include +void memory::MemoryCap::update_allocations(size_t) { } +void memory::MemoryCap::update_deallocations(size_t) { } + namespace snort { // Stubs for logs diff --git a/src/network_inspectors/appid/test/tp_mock.cc b/src/network_inspectors/appid/test/tp_mock.cc index 29db0b692..4427d362d 100644 --- a/src/network_inspectors/appid/test/tp_mock.cc +++ b/src/network_inspectors/appid/test/tp_mock.cc @@ -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; diff --git a/src/network_inspectors/appid/tp_appid_session_api.h b/src/network_inspectors/appid/tp_appid_session_api.h index 31fa64252..f7a3c9443 100644 --- a/src/network_inspectors/appid/tp_appid_session_api.h +++ b/src/network_inspectors/appid/tp_appid_session_api.h @@ -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; } diff --git a/src/network_inspectors/appid/tp_appid_utils.cc b/src/network_inspectors/appid/tp_appid_utils.cc index a588800c6..72f49c122 100644 --- a/src/network_inspectors/appid/tp_appid_utils.cc +++ b/src/network_inspectors/appid/tp_appid_utils.cc @@ -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;