]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Fix possible use-after-free in structured logging
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 23 Jan 2026 12:05:35 +0000 (13:05 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 23 Jan 2026 12:05:35 +0000 (13:05 +0100)
SL keeps a reference to objects passed to it until it decides to
actually generate the log content, so we should not pass temporaries to
it.

Signed-off-by: Remi Gacogne <remi.gacogne@powerdns.com>
pdns/dnsdistdist/dnsdist-dnsquestion.cc

index 21b25210822036d5ef3a18b263ad1d1d4e101de9..4347ecff45d9ab6ac90a898184073a7187db92ca 100644 (file)
@@ -76,7 +76,7 @@ std::shared_ptr<const Logr::Logger> DNSResponse::getThisLogger(std::shared_ptr<c
   auto logger = DNSQuestion::getThisLogger(std::move(parent));
   if (data.size() >= sizeof(dnsheader)) {
     const auto header = getHeader();
-    logger = logger->withValues("dns.response.rcode", Logging::Loggable(RCode::to_s(header->rcode)));
+    logger = logger->withValues("dns.response.rcode", Logging::Loggable(header->rcode));
   }
   if (d_downstream) {
     logger = logger->withValues("backend.protocol", Logging::Loggable(d_downstream->getProtocol()), "backend.name", Logging::Loggable(d_downstream->getName()), "backend.address", Logging::Loggable(d_downstream->d_config.remote));