]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Prevent a crash with DynBPF objects in client mode 10162/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 17 Feb 2021 09:38:58 +0000 (10:38 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 10 Mar 2021 15:43:51 +0000 (16:43 +0100)
(cherry picked from commit 22189743415af130b0e32a5a13aca1a26f800ead)

pdns/dnsdist-lua-bindings.cc
pdns/dnsdist-lua.cc

index bc66083f1b226f41cb3b0bf86400f5d67a622143..1555f0e250515f80fa7733d9c725cad773c5a8dd 100644 (file)
@@ -444,6 +444,10 @@ void setupLuaBindings(bool client)
     });
 
     g_lua.registerFunction<void(std::shared_ptr<DynBPFFilter>::*)(boost::variant<std::string, std::vector<std::pair<int, std::string>>>)>("excludeRange", [](std::shared_ptr<DynBPFFilter> dbpf, boost::variant<std::string, std::vector<std::pair<int, std::string>>> ranges) {
+      if (!dbpf) {
+        return;
+      }
+
       if (ranges.type() == typeid(std::vector<std::pair<int, std::string>>)) {
         for (const auto& range : *boost::get<std::vector<std::pair<int, std::string>>>(&ranges)) {
           dbpf->excludeRange(Netmask(range.second));
@@ -455,6 +459,10 @@ void setupLuaBindings(bool client)
     });
 
     g_lua.registerFunction<void(std::shared_ptr<DynBPFFilter>::*)(boost::variant<std::string, std::vector<std::pair<int, std::string>>>)>("includeRange", [](std::shared_ptr<DynBPFFilter> dbpf, boost::variant<std::string, std::vector<std::pair<int, std::string>>> ranges) {
+      if (!dbpf) {
+        return;
+      }
+
       if (ranges.type() == typeid(std::vector<std::pair<int, std::string>>)) {
         for (const auto& range : *boost::get<std::vector<std::pair<int, std::string>>>(&ranges)) {
           dbpf->includeRange(Netmask(range.second));
index 5de7eb5991eeb3d7d0d09ef816c8b87a8c0ff943..3a669526951d9f4816bcce42ffc64563671fca60 100644 (file)
@@ -1559,6 +1559,9 @@ static void setupLuaConfig(bool client, bool configCheck)
     });
 
   g_lua.writeFunction("addBPFFilterDynBlocks", [](const std::unordered_map<ComboAddress,unsigned int, ComboAddress::addressOnlyHash, ComboAddress::addressOnlyEqual>& m, std::shared_ptr<DynBPFFilter> dynbpf, boost::optional<int> seconds, boost::optional<std::string> msg) {
+      if (!dynbpf) {
+        return;
+      }
       setLuaSideEffect();
       struct timespec until, now;
       clock_gettime(CLOCK_MONOTONIC, &now);