]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Fix out-of-bounds check for UDP responses from backend 17209/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 23 Mar 2026 12:27:04 +0000 (13:27 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 23 Mar 2026 12:27:04 +0000 (13:27 +0100)
Signed-off-by: Remi Gacogne <remi.gacogne@powerdns.com>
pdns/dnsdistdist/dnsdist-backend.cc

index 31592b996c62b1ce9efcd5a8544d66fe8c12858a..f8100882b966ff9250b55628534da5ba6e470ebe 100644 (file)
@@ -581,7 +581,7 @@ uint16_t DownstreamState::saveState(InternalQueryState&& state)
 
   do {
     uint16_t selectedID = (idOffset++) % idStates.size();
-    IDState& ids = idStates[selectedID];
+    IDState& ids = idStates.at(selectedID);
     auto guard = ids.acquire();
     if (!guard) {
       continue;
@@ -624,7 +624,7 @@ void DownstreamState::restoreState(uint16_t id, InternalQueryState&& state)
     return;
   }
 
-  auto& ids = idStates[id];
+  auto& ids = idStates.at(id);
   auto guard = ids.acquire();
   if (!guard) {
     /* already used */
@@ -663,11 +663,11 @@ std::optional<InternalQueryState> DownstreamState::getState(uint16_t id)
     return result;
   }
 
-  if (id > idStates.size()) {
+  if (id >= idStates.size()) {
     return result;
   }
 
-  auto& ids = idStates[id];
+  auto& ids = idStates.at(id);
   auto guard = ids.acquire();
   if (!guard) {
     return result;