From c807246ca0d2c41722fa55932350c18b5ca9f368 Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Wed, 7 Apr 2021 12:10:15 +0200 Subject: [PATCH] dnsdist: Fix race conditions in QPSAction, QPSPoolAction --- pdns/dnsdist-lua-actions.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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; }; -- 2.47.2