From: Remi Gacogne Date: Wed, 7 Apr 2021 10:10:15 +0000 (+0200) Subject: dnsdist: Fix race conditions in QPSAction, QPSPoolAction X-Git-Tag: dnsdist-1.6.0-rc1~1^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c807246ca0d2c41722fa55932350c18b5ca9f368;p=thirdparty%2Fpdns.git dnsdist: Fix race conditions in QPSAction, QPSPoolAction --- diff --git a/pdns/dnsdist-lua-actions.cc b/pdns/dnsdist-lua-actions.cc index 707afe83e3..f75372f467 100644 --- a/pdns/dnsdist-lua-actions.cc +++ b/pdns/dnsdist-lua-actions.cc @@ -88,6 +88,7 @@ public: } DNSAction::Action operator()(DNSQuestion* dq, std::string* ruleresult) const override { + std::lock_guard guard(d_lock); if (d_qps.check()) { return Action::None; } @@ -100,6 +101,7 @@ public: return "qps limit to "+std::to_string(d_qps.getRate()); } private: + mutable std::mutex d_lock; QPSLimiter d_qps; }; @@ -294,8 +296,9 @@ public: QPSPoolAction(unsigned int limit, const std::string& pool) : d_qps(limit, limit), d_pool(pool) {} DNSAction::Action operator()(DNSQuestion* dq, std::string* ruleresult) const override { + std::lock_guard guard(d_lock); if (d_qps.check()) { - *ruleresult=d_pool; + *ruleresult = d_pool; return Action::Pool; } else { @@ -308,6 +311,7 @@ public: } private: + mutable std::mutex d_lock; QPSLimiter d_qps; std::string d_pool; };