From: Andres Avila Segura (aavilase) Date: Tue, 3 Jun 2025 20:32:21 +0000 (+0000) Subject: Pull request #4735: appid: fix AppIdInspector hanging during tinit on startup and... X-Git-Tag: 3.9.1.0~18 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9212c1fc3e33ee206b6601c612791cf5a426e121;p=thirdparty%2Fsnort3.git Pull request #4735: appid: fix AppIdInspector hanging during tinit on startup and reload third party Merge in SNORT/snort3 from ~AAVILASE/snort3:tp_tinit_hanging_fix to master Squashed commit of the following: commit 383d11a617737c3d1a9c29d9811cd530a393fb44 Author: Andres Avila Date: Thu May 8 18:42:23 2025 -0400 appid: queue analyzer command for third party setup during appid id tinit and stagger packet threads during third party tinit --- diff --git a/src/network_inspectors/appid/appid_inspector.cc b/src/network_inspectors/appid/appid_inspector.cc index 59f76f8f8..9af66f075 100644 --- a/src/network_inspectors/appid/appid_inspector.cc +++ b/src/network_inspectors/appid/appid_inspector.cc @@ -177,6 +177,12 @@ void AppIdInspector::show(const SnortConfig*) const config->show(); } +void AppIdInspector::third_party_tinit() +{ + while (pkt_thread_tp_appid_ctxt->tinit()) + ; +} + void AppIdInspector::tinit() { appid_pub_id = cached_global_pub_id; @@ -196,7 +202,7 @@ void AppIdInspector::tinit() assert(!pkt_thread_tp_appid_ctxt); pkt_thread_tp_appid_ctxt = ctxt.get_tp_appid_ctxt(); if (pkt_thread_tp_appid_ctxt) - pkt_thread_tp_appid_ctxt->tinit(); + third_party_tinit(); if (config->log_all_sessions) appidDebug->set_enabled(true); if ( snort::HighAvailabilityManager::active() ) diff --git a/src/network_inspectors/appid/appid_inspector.h b/src/network_inspectors/appid/appid_inspector.h index b94a6bd90..7b8b1b659 100644 --- a/src/network_inspectors/appid/appid_inspector.h +++ b/src/network_inspectors/appid/appid_inspector.h @@ -58,6 +58,7 @@ private: AppIdConfig* config = nullptr; AppIdContext ctxt; static unsigned cached_global_pub_id; + void third_party_tinit(); }; extern const snort::InspectApi appid_inspector_api; diff --git a/src/network_inspectors/appid/appid_module.cc b/src/network_inspectors/appid/appid_module.cc index 4c0acda50..23179288d 100644 --- a/src/network_inspectors/appid/appid_module.cc +++ b/src/network_inspectors/appid/appid_module.cc @@ -177,9 +177,13 @@ private: bool ACThirdPartyAppIdContextSwap::execute(Analyzer&, void**) { - assert(!pkt_thread_tp_appid_ctxt); - pkt_thread_tp_appid_ctxt = inspector.get_ctxt().get_tp_appid_ctxt(); - pkt_thread_tp_appid_ctxt->tinit(); + if (!pkt_thread_tp_appid_ctxt) + pkt_thread_tp_appid_ctxt = inspector.get_ctxt().get_tp_appid_ctxt(); + int reload_in_progress = pkt_thread_tp_appid_ctxt->tinit(); + if (reload_in_progress) { + APPID_LOG(nullptr, TRACE_INFO_LEVEL, "== rescheduling third-party context swap\n"); + return false; + } ThirdPartyAppIdContext::set_tp_reload_in_progress(false); APPID_LOG(nullptr, TRACE_INFO_LEVEL, "== third-party context swap in progress\n"); return true;