From: Mike Stepanek (mstepane) Date: Fri, 9 Apr 2021 12:57:13 +0000 (+0000) Subject: Merge pull request #2831 in SNORT/snort3 from ~OSERHIIE/snort3:bug_CSCvx77413 to... X-Git-Tag: 3.1.4.0~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7143a642db0a0b93ebcd8279297eb20eb8d6a8f2;p=thirdparty%2Fsnort3.git Merge pull request #2831 in SNORT/snort3 from ~OSERHIIE/snort3:bug_CSCvx77413 to master Squashed commit of the following: commit 34425873d946ed92696fcd20f0be7b43803fbb40 Author: Oleksandr Serhiienko Date: Tue Apr 6 23:54:48 2021 +0300 binder: update flow data inspector on a service change --- diff --git a/src/network_inspectors/binder/binder.cc b/src/network_inspectors/binder/binder.cc index e009b9fc7..7cdb12197 100644 --- a/src/network_inspectors/binder/binder.cc +++ b/src/network_inspectors/binder/binder.cc @@ -457,7 +457,7 @@ private: void get_bindings(Flow&, Stuff&, const char* service = nullptr); void apply(Flow&, Stuff&); void apply_assistant(Flow&, Stuff&, const char*); - Inspector* find_gadget(Flow&); + Inspector* find_gadget(Flow&, Inspector*& data); private: std::vector bindings; @@ -664,9 +664,10 @@ void Binder::handle_flow_service_change(Flow& flow) Profile profile(bindPerfStats); Inspector* ins = nullptr; + Inspector* data = nullptr; if (flow.service) { - ins = find_gadget(flow); + ins = find_gadget(flow, data); if (flow.gadget != ins) { if (flow.gadget) @@ -675,6 +676,13 @@ void Binder::handle_flow_service_change(Flow& flow) { flow.set_gadget(ins); flow.ssn_state.snort_protocol_id = ins->get_service(); + if (data and data != flow.data) + { + if (flow.data) + flow.clear_data(); + + flow.set_data(data); + } DataBus::publish(SERVICE_INSPECTOR_CHANGE_EVENT, DetectionEngine::get_current_packet()); } else @@ -808,10 +816,11 @@ void Binder::get_bindings(Flow& flow, Stuff& stuff, const char* service) bstats.no_match++; } -Inspector* Binder::find_gadget(Flow& flow) +Inspector* Binder::find_gadget(Flow& flow, Inspector*& data) { Stuff stuff; get_bindings(flow, stuff, flow.service); + data = stuff.data; return stuff.gadget; }