]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #1291 in SNORT/snort3 from appid_leaks to master
authorMike Stepanek (mstepane) <mstepane@cisco.com>
Thu, 28 Jun 2018 15:38:41 +0000 (11:38 -0400)
committerMike Stepanek (mstepane) <mstepane@cisco.com>
Thu, 28 Jun 2018 15:38:41 +0000 (11:38 -0400)
Squashed commit of the following:

commit 9b47b3bc433e235ab0d9360452fc7abc7ddb961f
Author: deramada <deramada@cisco.com>
Date:   Tue Jun 26 09:29:42 2018 -0400

    appid: release plugins

src/network_inspectors/appid/appid_discovery.cc
src/network_inspectors/appid/appid_inspector.cc
src/network_inspectors/appid/client_plugins/client_discovery.cc
src/network_inspectors/appid/client_plugins/client_discovery.h
src/network_inspectors/appid/service_plugins/service_discovery.cc
src/network_inspectors/appid/service_plugins/service_discovery.h

index c385be1921daa125d62fc50dae44238077c70f5f..5a9390584252901049599a38084a4aa21e9d5202 100644 (file)
@@ -89,6 +89,12 @@ void AppIdDiscovery::finalize_plugins()
     ClientDiscovery::get_instance().finalize_client_plugins();
 }
 
+void AppIdDiscovery::release_plugins()
+{
+    ServiceDiscovery::release_instance();
+    ClientDiscovery::release_instance();
+}
+
 void AppIdDiscovery::tterm()
 {
     ClientDiscovery::get_instance().release_thread_resources();
index 8a5fb0104bfd768c8ff7df18f659a38b3d1f6fd0..d28fc5cef44197c96619ca5012891c4ce66ec34b 100644 (file)
@@ -223,6 +223,7 @@ static void appid_inspector_pterm()
     clean_appid_forecast();
     free_length_app_cache();
     LuaDetectorManager::terminate();
+    AppIdDiscovery::release_plugins();
     delete HttpPatternMatchers::get_instance();
     service_dns_host_clean();
     service_ssl_clean();
index 2bfde41aee3589fbd3cc501b19d3bf8f70fd255e..d842a02de0e28408c2ad6a9bd12bf39e0d6a3ca2 100644 (file)
@@ -54,6 +54,7 @@ using namespace snort;
 
 #define MAX_CANDIDATE_CLIENTS 10
 
+ClientDiscovery* ClientDiscovery::discovery_manager = nullptr;
 ProfileStats clientMatchPerfStats;
 THREAD_LOCAL ClientAppMatch* match_free_list = nullptr;
 
@@ -78,10 +79,8 @@ void ClientDiscovery::release_thread_resources()
     }
 }
 
-//FIXIT-M: Don't use pointer and pass discovery_manager directly
 ClientDiscovery& ClientDiscovery::get_instance(AppIdInspector* ins)
 {
-    static ClientDiscovery* discovery_manager = nullptr;
     if (!discovery_manager)
     {
         assert(ins);
@@ -91,6 +90,13 @@ ClientDiscovery& ClientDiscovery::get_instance(AppIdInspector* ins)
     return *discovery_manager;
 }
 
+void ClientDiscovery::release_instance()
+{
+    assert(discovery_manager);
+    delete discovery_manager;
+    discovery_manager = nullptr;
+
+}
 void ClientDiscovery::initialize()
 {
     new AimClientDetector(this);
index 3c565714ac23cab410f6475810bf32250f4f3e2d..4d197063d466d3f1ece395afb30665dc09c4f2e2 100644 (file)
@@ -46,6 +46,7 @@ class ClientDiscovery : public AppIdDiscovery
 public:
     ~ClientDiscovery() override;
     static ClientDiscovery& get_instance(AppIdInspector* ins = nullptr);
+    static void release_instance();
 
     void finalize_client_plugins();
     void release_thread_resources();
@@ -58,6 +59,7 @@ private:
     ClientAppMatch* find_detector_candidates(const snort::Packet* pkt, IpProtocol);
     void create_detector_candidates_list(AppIdSession&, snort::Packet*);
     int get_detector_candidates_list(AppIdSession&, snort::Packet*, AppidSessionDirection direction);
+    static ClientDiscovery* discovery_manager;
 };
 
 #endif
index 2ebf5bdc9666d1268c8bbe6a5b5b7b39854d1fc9..3dc5ee6a828d0c11360095a5bd6719da85ba9e55 100644 (file)
@@ -86,9 +86,9 @@
 
 using namespace snort;
 
-static ServiceDetector* ftp_service;
-
 ProfileStats serviceMatchPerfStats;
+static ServiceDetector* ftp_service;
+ServiceDiscovery* ServiceDiscovery::discovery_manager = nullptr;
 
 ServiceDiscovery::ServiceDiscovery(AppIdInspector& ins)
     : AppIdDiscovery(ins)
@@ -96,10 +96,8 @@ ServiceDiscovery::ServiceDiscovery(AppIdInspector& ins)
     initialize();
 }
 
-//FIXIT-M: Don't use pointer and pass discovery_manager directly
 ServiceDiscovery& ServiceDiscovery::get_instance(AppIdInspector* ins)
 {
-    static  ServiceDiscovery* discovery_manager = nullptr;
     if (!discovery_manager)
     {
         assert(ins);
@@ -109,6 +107,13 @@ ServiceDiscovery& ServiceDiscovery::get_instance(AppIdInspector* ins)
     return *discovery_manager;
 }
 
+void ServiceDiscovery::release_instance()
+{
+    assert(discovery_manager);
+    delete discovery_manager;
+    discovery_manager = nullptr;
+}
+
 void ServiceDiscovery::initialize()
 {
     new BattleFieldServiceDetector(this);
index a84556793dc32182ee4b7db123797f67e50e9696..74844a9339a4f7af55b69131f9413b387156a009 100644 (file)
@@ -69,6 +69,7 @@ class ServiceDiscovery : public AppIdDiscovery
 {
 public:
     static ServiceDiscovery& get_instance(AppIdInspector* ins = nullptr);
+    static void release_instance();
 
     void finalize_service_patterns();
     int add_service_port(AppIdDetector*, const ServiceDetectorPort&) override;
@@ -89,6 +90,7 @@ private:
     void get_next_service(const snort::Packet*, const AppidSessionDirection dir, AppIdSession&);
     void get_port_based_services(IpProtocol, uint16_t port, AppIdSession&);
     void match_by_pattern(AppIdSession&, const snort::Packet*, IpProtocol);
+    static ServiceDiscovery* discovery_manager;
     std::vector<AppIdDetector*> service_detector_list;
     std::unordered_map<uint16_t, std::vector<ServiceDetector*> > tcp_services;
     std::unordered_map<uint16_t, std::vector<ServiceDetector*> > udp_services;