From: Steve Chew (stechew) Date: Tue, 15 Nov 2022 22:54:00 +0000 (+0000) Subject: Pull request #3667: smtp: Do not accumulate cmds across policies and reloads. X-Git-Tag: 3.1.47.0~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6cfaf15dc032fb31faa543aea3e03d5d27f199a0;p=thirdparty%2Fsnort3.git Pull request #3667: smtp: Do not accumulate cmds across policies and reloads. Merge in SNORT/snort3 from ~STECHEW/snort3:slow_reload_fix to master Squashed commit of the following: commit 12055a3409f2373424b8e1c0cd418f654e27bc4d Author: Steve Chew Date: Tue Nov 15 13:29:18 2022 -0500 smtp: Do not accumulate cmds across policies and reloads. Avoids memory and performance problem. --- diff --git a/src/service_inspectors/smtp/smtp.cc b/src/service_inspectors/smtp/smtp.cc index c118cf8ff..22d680865 100644 --- a/src/service_inspectors/smtp/smtp.cc +++ b/src/service_inspectors/smtp/smtp.cc @@ -1607,6 +1607,8 @@ static Inspector* smtp_ctor(Module* m) while ( (cmd = mod->get_cmd(i++)) ) smtp->ProcessSmtpCmdsList(cmd); + mod->clear_cmds(); + return smtp; } diff --git a/src/service_inspectors/smtp/smtp_module.cc b/src/service_inspectors/smtp/smtp_module.cc index 0e266ffbe..45fd1a049 100644 --- a/src/service_inspectors/smtp/smtp_module.cc +++ b/src/service_inspectors/smtp/smtp_module.cc @@ -199,8 +199,7 @@ SmtpModule::~SmtpModule() delete config; } - for ( auto p : cmds ) - delete p; + clear_cmds(); } const RuleMap* SmtpModule::get_rules() const @@ -233,6 +232,14 @@ const SmtpCmd* SmtpModule::get_cmd(unsigned idx) return nullptr; } +void SmtpModule::clear_cmds() +{ + for ( auto p : cmds ) + delete p; + + cmds.clear(); +} + bool SmtpModule::set(const char*, Value& v, SnortConfig*) { if ( v.is("auth_cmds") ) diff --git a/src/service_inspectors/smtp/smtp_module.h b/src/service_inspectors/smtp/smtp_module.h index bf2e62dba..0b05ff00f 100644 --- a/src/service_inspectors/smtp/smtp_module.h +++ b/src/service_inspectors/smtp/smtp_module.h @@ -96,6 +96,7 @@ public: SmtpProtoConf* get_data(); const SmtpCmd* get_cmd(unsigned idx); + void clear_cmds(); Usage get_usage() const override { return INSPECT; }