Merge in SNORT/snort3 from ~BSACHDEV/snort3:tsan_warnings_part1 to master
Squashed commit of the following:
commit
b2934642d9bf0fcf7d53f6fc80c4540e7a63736c
Author: bsachdev <bsachdev@cisco.com>
Date: Wed Mar 8 09:03:53 2023 -0500
appid: Fixed TSAN warnings
appidDebug->set_enabled(true);
if ( snort::HighAvailabilityManager::active() )
AppIdHAManager::tinit();
+ ServiceDiscovery::set_thread_local_ftp_service();
}
void AppIdInspector::tterm()
pkt_thread_tp_appid_ctxt->tfini();
if ( snort::HighAvailabilityManager::active() )
AppIdHAManager::tterm();
+ ServiceDiscovery::reset_thread_local_ftp_service();
}
void AppIdInspector::tear_down(SnortConfig*)
AppIdPegCounts::cleanup_pegs();
AppIdServiceState::initialize(ctxt.config.memcap);
AppIdPegCounts::init_pegs();
-
+ ServiceDiscovery::set_thread_local_ftp_service();
pkt_thread_odp_ctxt = ¤t_odp_ctxt;
+
assert(odp_thread_local_ctxt);
delete odp_thread_local_ctxt;
odp_thread_local_ctxt = new OdpThreadContext;
using namespace snort;
static ServiceDetector* ftp_service;
+static THREAD_LOCAL ServiceDetector* pkt_thread_ftp_service;
void ServiceDiscovery::initialize(AppIdInspector& inspector)
{
int ServiceDiscovery::add_ftp_service_state(AppIdSession& asd)
{
- if (!ftp_service)
+ if (!pkt_thread_ftp_service)
return -1;
- return asd.add_flow_data_id(21, ftp_service);
+ return asd.add_flow_data_id(21, pkt_thread_ftp_service);
}
void ServiceDiscovery::clear_ftp_service_state()
ftp_service = nullptr;
}
+void ServiceDiscovery::set_thread_local_ftp_service()
+{
+ pkt_thread_ftp_service = ftp_service;
+}
+
+void ServiceDiscovery::reset_thread_local_ftp_service()
+{
+ pkt_thread_ftp_service = nullptr;
+}
+
bool ServiceDiscovery::do_service_discovery(AppIdSession& asd, Packet* p,
AppidSessionDirection direction, AppidChangeBits& change_bits)
{
int incompatible_data(AppIdSession&, const snort::Packet*, AppidSessionDirection dir, ServiceDetector*);
static int add_ftp_service_state(AppIdSession&);
static void clear_ftp_service_state();
-
+ static void set_thread_local_ftp_service();
+ static void reset_thread_local_ftp_service();
private:
void get_next_service(const snort::Packet*, const AppidSessionDirection dir, AppIdSession&);
void get_port_based_services(IpProtocol, uint16_t port, AppIdSession&);
int RpcServiceDetector::rpc_udp_validate(AppIdDiscoveryArgs& args)
{
- static char subname[64];
ServiceRPCData* rd;
AppIdServiceSubtype sub;
AppIdServiceSubtype* subtype;
}
else if (program)
{
+ char subname[64];
snprintf(subname, sizeof(subname), "(%u)", program);
sub.service = subname;
subtype = ⊂
const ServiceRPCCall* call;
const ServiceRPCReply* reply;
- static char subname[64];
AppIdServiceSubtype sub;
AppIdServiceSubtype* subtype;
uint32_t program = 0;
}
else if (program)
{
- sprintf(subname, "(%u)", program);
+ char subname[64];
+ snprintf(subname, sizeof(subname), "(%u)", program);
sub.service = subname;
subtype = ⊂
}
#include <cassert>
#include <list>
+#include <mutex>
#include "log/messages.h"
#include "utils/stats.h"
}
static uint8_t xlatcase[256];
+static bool xlatinit = true;
void acsmx2_init_xlatcase()
{
+ static std::mutex _m;
+ std::lock_guard<std::mutex> lock(_m);
+ if ( !xlatinit )
+ return;
+
int i;
for (i = 0; i < 256; i++)
{
xlatcase[i] = (uint8_t)toupper(i);
}
+
+ xlatinit = false;
}
static inline void ConvertCaseEx(uint8_t* d, const uint8_t* s, int m)