From: Remi Gacogne Date: Fri, 3 Apr 2026 14:28:17 +0000 (+0200) Subject: dnsdist: Prevent division by zero when computing DNSCrypt padding (YWH-PGM6095-189) X-Git-Tag: auth-5.1.0-beta1~15^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d21bdd31c8aaf026181970cabfa3903b6415a5fa;p=thirdparty%2Fpdns.git dnsdist: Prevent division by zero when computing DNSCrypt padding (YWH-PGM6095-189) Signed-off-by: Remi Gacogne --- diff --git a/pdns/dnsdistdist/dnscrypt.cc b/pdns/dnsdistdist/dnscrypt.cc index 6e8947cb5a..3d38d42ff9 100644 --- a/pdns/dnsdistdist/dnscrypt.cc +++ b/pdns/dnsdistdist/dnscrypt.cc @@ -639,6 +639,9 @@ uint16_t DNSCryptQuery::computePaddingSize(uint16_t unpaddedLen, size_t maxLen) if (d_pair == nullptr) { throw std::runtime_error("Trying to compute the padding size from an invalid DNSCrypt query"); } + if (unpaddedLen > maxLen) { + throw std::runtime_error("Trying to compute the padding size for an oversized content"); + } DNSCryptNonceType nonce; memcpy(nonce.data(), d_header.clientNonce.data(), d_header.clientNonce.size()); @@ -696,6 +699,9 @@ int DNSCryptQuery::encryptResponse(PacketBuffer& response, size_t maxResponseSiz size_t requiredSize = sizeof(responseHeader) + DNSCRYPT_MAC_SIZE + response.size(); size_t maxSize = std::min(maxResponseSize, requiredSize + DNSCRYPT_MAX_RESPONSE_PADDING_SIZE); + if (requiredSize > maxResponseSize) { + return ENOBUFS; + } uint16_t paddingSize = computePaddingSize(requiredSize, maxSize); requiredSize += paddingSize;