1 1.1 christos .. Copyright (C) Internet Systems Consortium, Inc. ("ISC") 2 1.1 christos .. 3 1.1 christos .. SPDX-License-Identifier: MPL-2.0 4 1.1 christos .. 5 1.1 christos .. This Source Code Form is subject to the terms of the Mozilla Public 6 1.1 christos .. License, v. 2.0. If a copy of the MPL was not distributed with this 7 1.1 christos .. file, you can obtain one at https://mozilla.org/MPL/2.0/. 8 1.1 christos .. 9 1.1 christos .. See the COPYRIGHT file distributed with this work for additional 10 1.1 christos .. information regarding copyright ownership. 11 1.1 christos 12 1.1 christos BIND 9.20.26 13 1.1 christos ------------ 14 1.1 christos 15 1.1 christos Security Fixes 16 1.1 christos ~~~~~~~~~~~~~~ 17 1.1 christos 18 1.1 christos - [CVE-2026-11331] Fix handling of rpz CNAME expansion that returns name 19 1.1 christos too long. ``b950da5f625`` 20 1.1 christos 21 1.1 christos Previously, if the expansion of a wildcard CNAME RPZ policy resulted 22 1.1 christos in a name that exceeded the length limit, a self referential CNAME and 23 1.1 christos the original address record were returned, allowing the policy to be 24 1.1 christos bypassed. In branches up to 9.20, this also left query processing in 25 1.1 christos an inconsistent state which could trigger an assertion failure. We 26 1.1 christos now return a YXDOMAIN response, without the address. 27 1.1 christos 28 1.1 christos ISC would like to thank Laith Mash'al (0xmshal) for bringing this 29 1.1 christos issue to our attention. :gl:`#5856` 30 1.1 christos 31 1.1 christos - [CVE-2026-11721] Invalid signed wildcard records were being accepted. 32 1.1 christos ``249752cd72d`` 33 1.1 christos 34 1.1 christos Signed wildcard responses in which the Labels field in the `RRSIG` 35 1.1 christos record was less than the number of labels in the Signer Name field 36 1.1 christos were being incorrectly accepted. This in turn broke 37 1.1 christos `synth-from-dnssec`, which depends on such records being correctly 38 1.1 christos validated. This has been fixed. 39 1.1 christos 40 1.1 christos ISC thanks Qifan Zhang of Palo Alto Networks for bringing this issue 41 1.1 christos to our attention. :gl:`#5871` 42 1.1 christos 43 1.1 christos - [CVE-2026-13321] Fix DNSSEC validation bypass via out-of-zone NSEC 44 1.1 christos Next Field. ``6fbc963d4af`` 45 1.1 christos 46 1.1 christos A malicious zone with out-of-zone NSEC next owner names can cause a 47 1.1 christos DNSSEC validating resolver to cache such record and, if 48 1.1 christos `synth-from-dnssec` is enabled, to generate negative answers for any 49 1.1 christos zone that is covered by the range. 50 1.1 christos 51 1.1 christos ISC would like to thank Qifan Zhang of Palo Alto Networks for 52 1.1 christos reporting the issue. :gl:`#5873` 53 1.1 christos 54 1.1 christos - [CVE-2026-10723] Correct verification of NSEC3 signer name. 55 1.1 christos ``df3abfc3184`` 56 1.1 christos 57 1.1 christos BIND 9 accepted child-zone NSEC3 records where the first label equals 58 1.1 christos the hash of the parent zone as valid parent-zone closest encloser 59 1.1 christos proofs. This has been fixed. 60 1.1 christos 61 1.1 christos ISC thanks Qifan Zhang of Palo Alto Networks for reporting the issue. 62 1.1 christos :gl:`#5874` 63 1.1 christos 64 1.1 christos - [CVE-2026-12617] Do no assert for some specifics CNAME and DNAME 65 1.1 christos queries. ``d75d1e93958`` 66 1.1 christos 67 1.1 christos A bug in the resolver's handling of certain cached DNAME and CNAME 68 1.1 christos responses could cause named to trigger an assertion failure and exit. 69 1.1 christos An attacker controlling a domain name and the authoritative DNS server 70 1.1 christos it is hosted on could exploit this behavior to cause a 71 1.1 christos denial-of-service. This vulnerability has been fixed. 72 1.1 christos 73 1.1 christos ISC thanks Qifan Zhang of Palo Alto Networks for bringing this issue 74 1.1 christos to our attention. :gl:`#5946` 75 1.1 christos 76 1.1 christos - [CVE-2026-10822] Malformed DNSKEY records could trigger an assertion. 77 1.1 christos ``a1777ce7ee0`` 78 1.1 christos 79 1.1 christos Previously, `dns_name_fromwire()` did not honor the record boundary 80 1.1 christos when reading names from the wire, allowing malformed records to be 81 1.1 christos accepted when they should not have been. In particular, malformed 82 1.1 christos DNSKEY records could trigger an assertion failure when being printed. 83 1.1 christos This has been fixed. :gl:`#6004` 84 1.1 christos 85 1.1 christos - Reclaim memory promptly when DNSSEC validations are canceled. 86 1.1 christos ``b8f9d7657ac`` 87 1.1 christos 88 1.1 christos When a resolver is flooded with queries that require DNSSEC validation 89 1.1 christos for example during a random-subdomain attack many of those 90 1.1 christos validations are canceled before they complete. Previously a canceled 91 1.1 christos validation still kept its place in the internal work queue and held 92 1.1 christos the associated response in memory until that queued work eventually 93 1.1 christos ran, so memory could climb sharply under sustained load. The canceled 94 1.1 christos work is now dropped as soon as the validation is canceled, releasing 95 1.1 christos the memory it was holding. 96 1.1 christos 97 1.1 christos - [CVE-2026-11605] Prevent excessive validation work from crafted 98 1.1 christos negative responses. ``5f1bb0aad09`` 99 1.1 christos 100 1.1 christos A validating resolver could be made to perform a large amount of 101 1.1 christos DNSSEC validation work in response to a single answer, consuming 102 1.1 christos excessive CPU. A malicious authoritative server triggers this by 103 1.1 christos returning a signed negative answer (NXDOMAIN or NODATA) padded with 104 1.1 christos many denial-of-existence proof records, which the resolver continued 105 1.1 christos to verify beyond its per-query validation limit. It now enforces that 106 1.1 christos limit on negative answers and returns SERVFAIL once the limit is 107 1.1 christos reached. 108 1.1 christos 109 1.1 christos Closes: https://gitlab.isc.org/isc-projects/bind9/-/work_items/4463 110 1.1 christos 111 1.1 christos - [CVE-2026-11622] Prevent cache exhaustion under sustained attack. 112 1.1 christos ``410aa215eab`` 113 1.1 christos 114 1.1 christos The cache memory can become exhausted with expired entries whose 115 1.1 christos memory is not released due to a sustained attack on the same DNS name 116 1.1 christos that prevents the cleanup. This has been fixed. 117 1.1 christos 118 1.1 christos Closes: https://gitlab.isc.org/isc-projects/bind9/-/work_items/4760 119 1.1 christos 120 1.1 christos New Features 121 1.1 christos ~~~~~~~~~~~~ 122 1.1 christos 123 1.1 christos - Print OS platform in "named -V" ``5bb30b1f993`` 124 1.1 christos 125 1.1 christos The "running on" line emitted by `named -V` (as well as the startup 126 1.1 christos log and `rndc status`, which share the same source) now appends the 127 1.1 christos PRETTY_NAME value from /etc/os-release in parentheses after the uname 128 1.1 christos output, e.g.: 129 1.1 christos 130 1.1 christos running on Linux x86_64 6.19.14-... (Fedora Linux 42 (Workstation 131 1.1 christos Edition)) 132 1.1 christos 133 1.1 christos This helps disambiguate environments where the kernel string is not a 134 1.1 christos reliable indicator of the userspace, such as RHEL clones and 135 1.1 christos containers whose kernel does not match the host OS. 136 1.1 christos 137 1.1 christos When /etc/os-release is absent, /usr/lib/os-release is tried as a 138 1.1 christos fallback per the systemd os-release(5) specification. When neither is 139 1.1 christos available or no PRETTY_NAME is found, the output is unchanged. 140 1.1 christos 141 1.1 christos Assisted-by: Claude:claude-opus-4-7 :gl:`#5334` :gl:`!12319` 142 1.1 christos 143 1.1 christos Removed Features 144 1.1 christos ~~~~~~~~~~~~~~~~ 145 1.1 christos 146 1.1 christos - Remove the secondary validator in query.c. ``1687a3d0b85`` 147 1.1 christos 148 1.1 christos Previously, when the additional section of a response was being 149 1.1 christos populated, if cached data was found with pending trust, it would be 150 1.1 christos opportunistically validated. The code implementing this validation was 151 1.1 christos not quite formally correct. Rather than fixing it, the code has been 152 1.1 christos removed: RRsets with pending trust are now omitted from responses. 153 1.1 christos :gl:`#5966` :gl:`#5968` :gl:`#5972` :gl:`!12258` 154 1.1 christos 155 1.1 christos Feature Changes 156 1.1 christos ~~~~~~~~~~~~~~~ 157 1.1 christos 158 1.1 christos - Rework isc_work as per-loop, per-lane cancelable worker threads. 159 1.1 christos ``51d67c173e9`` 160 1.1 christos 161 1.1 christos Fold the libuv thread pool and the per-loop isc_helper threads into a 162 1.1 christos single isc_work pool. Each (loop, lane) gets its own SPSC queue and 163 1.1 christos worker, which drops the shared-queue contention, and the FAST/SLOW 164 1.1 christos lanes keep short crypto tasks off the long blocking ones (zone 165 1.1 christos dump/load, xfrin). isc_work jobs are now cancelable: isc_work_cancel() 166 1.1 christos tombstones a still-queued job and its after_cb fires with 167 1.1 christos ISC_R_CANCELED, so abandoned work can be dropped instead of run to 168 1.1 christos completion. :gl:`!12267` 169 1.1 christos 170 1.1 christos - Sync picohttpparser.c with upstream commit a875a01. ``7b249a11e34`` 171 1.1 christos 172 1.1 christos Synced with the h2o/picohttpparser upstream repository up to commit 173 1.1 christos f4d94b48b31e0abae029ebeafcfd9ca0680ede58. 174 1.1 christos 175 1.1 christos This commit is just hygiene and consistency by keeping the vendored 176 1.1 christos copy current. :gl:`!12273` 177 1.1 christos 178 1.1 christos Bug Fixes 179 1.1 christos ~~~~~~~~~ 180 1.1 christos 181 1.1 christos - Fix a bug in DNS UPDATE processing with inline-signing enabled. 182 1.1 christos ``ad4650c78fa`` 183 1.1 christos 184 1.1 christos In rare cases the :iscman:`named` process could terminate unexpectedly 185 1.1 christos when processing authorized DNS UPDATE messages in quick procession 186 1.1 christos which are updating a zone with inline-signing enabled. This has been 187 1.1 christos fixed. :gl:`#5816` :gl:`!12300` 188 1.1 christos 189 1.1 christos - Properly detect private records before copying. ``5c153b85e54`` 190 1.1 christos 191 1.1 christos We were triggering an assertion when trying to copy a private record 192 1.1 christos to a buffer for modifying. Extend the private type detection and copy 193 1.1 christos the contents after we have rejected invalid private records. 194 1.1 christos :gl:`#5857` :gl:`!12340` 195 1.1 christos 196 1.1 christos - Tighten referral DS acceptance. ``ed27fb9524f`` 197 1.1 christos 198 1.1 christos Named was accepting DS records for sibling zones when it shouldn't 199 1.1 christos have. This has been fixed. :gl:`#5870` :gl:`!12325` 200 1.1 christos 201 1.1 christos - Don't synthesize negative responses with pending NSEC. ``86b87dfd290`` 202 1.1 christos 203 1.1 christos If an NSEC record has not yet been validated and is cached with trust 204 1.1 christos pending, don't use it to synthesize negative responses. :gl:`#5872` 205 1.1 christos :gl:`#5887` :gl:`#5977` :gl:`!12368` 206 1.1 christos 207 1.1 christos - Check that an NSEC signer is at or above the name to be validated. 208 1.1 christos ``2afca834141`` 209 1.1 christos 210 1.1 christos Add a check that an NSEC record being used as a proof of nonexistence 211 1.1 christos for a given name is not signed by a name lower in the DNS hierarchy 212 1.1 christos than the one in question. :gl:`#5876` :gl:`!12324` 213 1.1 christos 214 1.1 christos - Don't evict DNSSEC-validated cache data on a CD=1 NXDOMAIN. 215 1.1 christos ``3e6cef2ac66`` 216 1.1 christos 217 1.1 christos When a client sent a query with the checking-disabled (CD) bit set and 218 1.1 christos the answer was NXDOMAIN, the resolver cached that unvalidated negative 219 1.1 christos response and discarded any DNSSEC-validated records it already held 220 1.1 christos for the same name, even though the validated data was more 221 1.1 christos trustworthy. A single such response - including a forged one - could 222 1.1 christos flush validated records from the cache and force the resolver to fetch 223 1.1 christos them again. The resolver now checks the trust level of the existing 224 1.1 christos data first and leaves the cache unchanged when it is already 225 1.1 christos validated. :gl:`#5877` :gl:`!12344` 226 1.1 christos 227 1.1 christos - Fix a 'deny-answer-aliases' configuration bypass issue. 228 1.1 christos ``47d375b9e63`` 229 1.1 christos 230 1.1 christos It was possible to use a maliciously crafted authoritative zone to 231 1.1 christos make :iscman:`named` resolver synthesize a ``DNAME`` "alias" that 232 1.1 christos should have been rejected by the configured :any:`deny-answer-aliases` 233 1.1 christos option. This has been fixed. :gl:`#5930` :gl:`!12245` 234 1.1 christos 235 1.1 christos - Reject external referrals from forwarders. ``cdbc5be8b0c`` 236 1.1 christos 237 1.1 christos Under `forward-first` policy in a forwarding zone BIND could accept NS 238 1.1 christos above the forward zone apex from negative responses. This has been 239 1.1 christos fixed. 240 1.1 christos 241 1.1 christos ISC would like to thank Qifan Zhang, of Palo Alto Networks, for the 242 1.1 christos report. :gl:`#5937` :gl:`!12278` 243 1.1 christos 244 1.1 christos - Fix a zone transfer over TLS (XoT) issue when using the opportunistic 245 1.1 christos TLS mode. ``40b64d13862`` 246 1.1 christos 247 1.1 christos The :iscman:`named` process, running as secondary DNS server, 248 1.1 christos configured to transfer a zone from a primary server using an encrypted 249 1.1 christos XoT transport in opportunistic TLS mode (i.e. without peer 250 1.1 christos certificate/hostname validation) could terminate unexpectedly when the 251 1.1 christos TLS ALPN negotiation with primary server was unsuccessful. This has 252 1.1 christos been fixed. :gl:`#5957` :gl:`!12242` 253 1.1 christos 254 1.1 christos - Unvalidated opt-out NSEC3 could be accepted in insecurity proof. 255 1.1 christos ``c3733e12f9e`` 256 1.1 christos 257 1.1 christos When determining whether an insecure delegation is legitimate, NSEC3 258 1.1 christos opt-out records which had not yet passed validation could be used. 259 1.1 christos This has been fixed. :gl:`#5970` :gl:`!12358` 260 1.1 christos 261 1.1 christos - Check wildcard signer and NOQNAME signer match. ``3621c8169bf`` 262 1.1 christos 263 1.1 christos A positive wildcard answer, and the NSEC3 proof that the requested 264 1.1 christos name doesn't exist in the zone, must both be from the same zone. 265 1.1 christos Otherwise, an NSEC3 from an ancestor zone could be used to interfere 266 1.1 christos with validation. 267 1.1 christos 268 1.1 christos We now retrieve the signer name from a wildcard response's signature. 269 1.1 christos An NSEC3 record cannot be used as a NOQNAME proof for the wildcard 270 1.1 christos unless it exactly matches the name one level above the NSEC3. 271 1.1 christos :gl:`#5971` :gl:`!12279` 272 1.1 christos 273 1.1 christos - Require secure trust for covering NSEC in the RBT cache. 274 1.1 christos ``b6bfa444e5b`` 275 1.1 christos 276 1.1 christos The guard against synthesizing negative answers from a pending NSEC 277 1.1 christos (#5977) was only added to the QP cache's find_coveringnsec(); the RBT 278 1.1 christos cache database kept binding any covering NSEC regardless of trust. On 279 1.1 christos builds configured with --with-cachedb=rbt this lets a piggy-backed, 280 1.1 christos unvalidated NSEC drive a synthesized NXDOMAIN, reviving the cache 281 1.1 christos poisoning that was fixed for the default cache. 282 1.1 christos 283 1.1 christos query_coveringnsec() only verifies the covering NSEC's trust on its 284 1.1 christos NODATA path; the NXDOMAIN path relies on the database returning a 285 1.1 christos secure record. Require the NSEC and its RRSIG to be dns_trust_secure 286 1.1 christos in find_coveringnsec(), matching the QP cache. :gl:`#5977` 287 1.1 christos :gl:`!12374` 288 1.1 christos 289 1.1 christos - Check dns_rdata_fromstruct() return values. ``416b0817d1b`` 290 1.1 christos 291 1.1 christos In some functions implementing RFC 5011 key maintenance, the results 292 1.1 christos of `dns_rdata_fromstruct()` were not checked. This has been fixed. 293 1.1 christos :gl:`#5982` :gl:`!12183` 294 1.1 christos 295 1.1 christos - Fix CNAME resolution failure caused by a cached SERVFAIL response. 296 1.1 christos ``b1e0a58f4f2`` 297 1.1 christos 298 1.1 christos Under certain circumstances, a cached SERVFAIL response could 299 1.1 christos incorrectly prevent successful resolution of a CNAME target. This 300 1.1 christos could cause resolution failures to persist until the cached SERVFAIL 301 1.1 christos entry expired, even when the CNAME target itself was otherwise 302 1.1 christos resolvable. This issue has been fixed. :gl:`#5983` :gl:`!12259` 303 1.1 christos 304 1.1 christos - [CVE-2026-13204] Prevent crash from malformed NSEC/NSEC3 response. 305 1.1 christos ``ad393b09232`` 306 1.1 christos 307 1.1 christos An assertion could be triggered by an improperly signed NOQNAME proof. 308 1.1 christos This has been fixed. 309 1.1 christos 310 1.1 christos ISC thanks Qifan Zhang of Palo Alto Networks for reporting the issue. 311 1.1 christos :gl:`#5985` 312 1.1 christos 313 1.1 christos - Reject unsupported RSA DNSKEY shapes during DNSSEC validation. 314 1.1 christos ``ea91570492c`` 315 1.1 christos 316 1.1 christos An authoritative server publishing an RSA DNSKEY with an unusually 317 1.1 christos large modulus or an exotic public exponent could make each DNSSEC 318 1.1 christos signature check on a validating recursive resolver noticeably more 319 1.1 christos expensive than for a normally sized key. Such DNSKEYs are now treated 320 1.1 christos as invalid. :gl:`#6008` :gl:`!12207` 321 1.1 christos 322 1.1 christos - Fix a bug in GeoIP2 string matching. ``f8f5e6a9d77`` 323 1.1 christos 324 1.1 christos When using GeoIP2 ACLs (see :any:`acl`), :iscman:`named` could 325 1.1 christos incorrectly match a name using a sub-string instead of the full name 326 1.1 christos match. This has been fixed. :gl:`#6019` :gl:`!12235` 327 1.1 christos 328 1.1 christos - Fix DNS-over-HTTPS (DoH) quota configuration issue. ``72d538fe269`` 329 1.1 christos 330 1.1 christos The :any:`http-listener-clients` and 331 1.1 christos :any:`http-streams-per-connection` configuration options could be 332 1.1 christos truncated to smaller values (or to ``0``, which means unlimited) when 333 1.1 christos very big configuration values were used, which exceeded ``65535``. As 334 1.1 christos a note - it is very unlikely that such big values are used in 335 1.1 christos production, and the default values for the affected options are 336 1.1 christos ``300`` and ``100``, correspondingly. This has been fixed. :gl:`#6021` 337 1.1 christos :gl:`!12231` 338 1.1 christos 339 1.1 christos - Fix invalid pointer release in JSON statistics-channel response. 340 1.1 christos ``5fe742e3fd1`` 341 1.1 christos 342 1.1 christos Each response served on a JSON statistics endpoint released the wrong 343 1.1 christos pointer to the JSON library after the response was sent: the response 344 1.1 christos body string instead of the JSON document. With the current responses 345 1.1 christos this does not crash named in practice, but the call is incorrect and 346 1.1 christos can in principle corrupt memory. XML responses are not affected. 347 1.1 christos :gl:`#6024` :gl:`!12274` 348 1.1 christos 349 1.1 christos - Truncated reply to a TSIG query no longer stalls the resolver. 350 1.1 christos ``c922cabd46d`` 351 1.1 christos 352 1.1 christos When an upstream server returned a truncated reply to a query that 353 1.1 christos BIND had signed with TSIG, the resolver could keep waiting for a 354 1.1 christos follow-up UDP packet that never arrived, so the query stalled until it 355 1.1 christos hit resolver-query-timeout and the client received no answer. BIND now 356 1.1 christos treats any reply it cannot authenticate as an immediate failure and 357 1.1 christos returns SERVFAIL right away as a defense in depth. :gl:`#6028` 358 1.1 christos :gl:`!12310` 359 1.1 christos 360 1.1 christos - Ignore updates removing DNSKEY RRset with class ANY. ``6a533ec622c`` 361 1.1 christos 362 1.1 christos When a Dynamic Update is received that removes the ``DNSKEY`` (or 363 1.1 christos ``CDNSKEY``, or ``CDS``) RRset, remove all records except the ones 364 1.1 christos that are in use for signing for the zone. :gl:`#6045` :gl:`!12230` 365 1.1 christos 366 1.1 christos - Fix a memory leak when updating a zone with more than 32 DNSSEC keys. 367 1.1 christos ``73440816e41`` 368 1.1 christos 369 1.1 christos Applying changes to a signed zone via DNS UPDATE or the 370 1.1 christos inline-signing raw-to-secure sync leaked the surplus keys when the 371 1.1 christos zone's key directory held more than 32, slowly growing named's memory 372 1.1 christos use. :gl:`#6051` :gl:`!12332` 373 1.1 christos 374 1.1 christos - Fix the memory ordering in the adaptive read-write lock. 375 1.1 christos ``eff9a306d88`` 376 1.1 christos 377 1.1 christos On hardware with a weak memory model, the internal read-write lock 378 1.1 christos could briefly admit a reader and a writer at the same time, risking 379 1.1 christos sporadic crashes or incorrect data. The reader/writer handshake now 380 1.1 christos uses sequentially consistent ordering so the two can no longer 381 1.1 christos overlap. :gl:`#6060` :gl:`!12205` 382 1.1 christos 383 1.1 christos - Print the full OID in PRIVATEOID key comments. ``87397c823dc`` 384 1.1 christos 385 1.1 christos The OID in the "; alg = ..." comment of a PRIVATEOID key was truncated 386 1.1 christos to sixteen characters. :gl:`#6092` :gl:`!12378` 387 1.1 christos 388 1.1 christos - Correct locator decoding for NID, L64, and L32 records. 389 1.1 christos ``8a8cc34a504`` 390 1.1 christos 391 1.1 christos NID, L64, and L32 records were decoded incorrectly when converted into 392 1.1 christos their parsed structures, because the preference field was not skipped 393 1.1 christos before the locator. :gl:`#6097` :gl:`!12349` 394 1.1 christos 395 1.1 christos - Fix a possible crash when cleaning up a view's caches. ``51d7456399d`` 396 1.1 christos 397 1.1 christos In rare cases named could crash while a view was being removed, for 398 1.1 christos example during reconfiguration or shutdown, as its internal caches 399 1.1 christos were torn down. This has been fixed. :gl:`#6119` :gl:`!12190` 400 1.1 christos 401 1.1 christos - Preserve the request message across async SIG(0) processing. 402 1.1 christos ``d6a4aa5ce50`` 403 1.1 christos 404 1.1 christos For SIG(0)-signed requests, view matching is offloaded and the request 405 1.1 christos is finished asynchronously from ns_client_request_continue(), which 406 1.1 christos passes client->inner.buffer to dns_dt_send(). That buffer aliases the 407 1.1 christos network manager's receive buffer, only valid during the read callback, 408 1.1 christos so it may already be freed and reused, producing garbage dnstap frames 409 1.1 christos (e.g. the "upforwd" sig0-over-DoT test fails with UQ=0). 410 1.1 christos 411 1.1 christos Copy the request message when entering async mode and reference the 412 1.1 christos copy, freeing it in ns__client_reset_cb(). 413 1.1 christos 414 1.1 christos Assisted-by: Claude:claude-opus-4-8 :gl:`#6139` :gl:`!12200` 415 1.1 christos 416 1.1 christos - Ignore 0-byte reads in the TCP read callback. ``8588ffec7de`` 417 1.1 christos 418 1.1 christos Callbacks for libuv stream reads do not signal zero-length reads as a 419 1.1 christos failure signal but rather as EAGAIN/EWOULDBLOCK. This can trigger an 420 1.1 christos assertion when a zero-length read is pushed onto a PROXYv2 endpoint 421 1.1 christos that has not yet processed the headers as it expects a non-NULL region 422 1.1 christos of positive length. :gl:`#6140` :gl:`!12291` 423 1.1 christos 424 1.1 christos - Include the IPv6 address's brackets in the parsed URL/URI host. 425 1.1 christos ``9baad48be06`` 426 1.1 christos 427 1.1 christos The brackets are not included in the host component of the parsed 428 1.1 christos URL/URI. Change the parser to include the brackets. :gl:`#6147` 429 1.1 christos :gl:`!12362` 430 1.1 christos 431 1.1 christos - Improve the input validation of the isc_url_parse() function. 432 1.1 christos ``f4c8f08042a`` 433 1.1 christos 434 1.1 christos The isc_url_parse() function failed to check the input buffer's length 435 1.1 christos and assumed that it can't be bigger than UINT16_MAX, because both the 436 1.1 christos 'off' and 'len' fields of the 'isc_url_parser_t' structure are 437 1.1 christos uint16_t. 438 1.1 christos 439 1.1 christos Add a check to not accept a buffer longer than 8192 octets. 440 1.1 christos :gl:`#6150` :gl:`!12361` 441 1.1 christos 442 1.1 christos - Only print per zone glue stats when query statistics is full. 443 1.1 christos ``097e530348f`` 444 1.1 christos 445 1.1 christos The code printing query statistics was ignoring the zone-statistics 446 1.1 christos option. This has been fixed. :gl:`#6164` :gl:`!12263` 447 1.1 christos 448 1.1 christos - CDS/CDNSKEY records were not removed when re-configuring the server. 449 1.1 christos ``20db02121f7`` 450 1.1 christos 451 1.1 christos When on an ``rndc reconfig`` the DNSSEC policy changes such that it 452 1.1 christos changes the expected ``CDNSKEY`` and/or ``CDS`` records in the zone, 453 1.1 christos the RRset should be updated accordingly. This did not happen when 454 1.1 christos removing digests from the configuration, or setting `cdnskey no;`. 455 1.1 christos This has been fixed. :gl:`#6166` :gl:`!12284` 456 1.1 christos 457 1.1 christos - Fix a crash when querying an empty non-terminal in a wildcard zone in 458 1.1 christos RBTDB. ``b8e5801ec5f`` 459 1.1 christos 460 1.1 christos A query for an empty non-terminal in a wildcard zone served from the 461 1.1 christos RBT zone database could abort named with an assertion failure. It now 462 1.1 christos returns the correct NODATA answer. :gl:`#6170` :gl:`!12299` 463 1.1 christos 464 1.1 christos - Stop reusing outgoing TCP connections the peer has already closed. 465 1.1 christos ``fb0ae8a5d6b`` 466 1.1 christos 467 1.1 christos ``named`` could hand a new query an idle forwarder/upstream TCP or TLS 468 1.1 christos connection that the peer had already closed, causing the query to fail 469 1.1 christos (and CLOSE-WAIT sockets to pile up). Idle reused connections are now 470 1.1 christos watched, so a close is noticed and the connection is dropped instead 471 1.1 christos of reused. A new ``tcp-reuse-timeout`` option controls how long an 472 1.1 christos idle outgoing connection is kept open for reuse (default 5 seconds). 473 1.1 christos :gl:`#6171` :gl:`!12317` 474 1.1 christos 475 1.1 christos - Fix DNSSEC validation failures for names under an apex DNAME. 476 1.1 christos ``cd006ecf235`` 477 1.1 christos 478 1.1 christos DNSSEC validation could fail with SERVFAIL for names covered by a 479 1.1 christos DNAME at the apex of a signed zone, unless the zone's keys were 480 1.1 christos already validated in the cache. This regression was introduced by the 481 1.1 christos recent fix for resolver stalls on CNAME responses to DS queries. 482 1.1 christos :gl:`#6176` :gl:`!12356` 483 1.1 christos 484 1.1 christos - Avoid needless queries when the DNSSEC validation limit is reached. 485 1.1 christos ``45a3e5b8561`` 486 1.1 christos 487 1.1 christos A validating resolver could send one needless upstream query after 488 1.1 christos reaching its per-fetch DNSSEC validation limit. It now stops 489 1.1 christos immediately. 490 1.1 christos 491 1.1 christos - Avoid writing through a const pointer in render_xsl() ``348e5a9ee54`` 492 1.1 christos 493 1.1 christos render_xsl() served the static XSL stylesheet by casting away the 494 1.1 christos const qualifier of xslmsg and handing the pointer to 495 1.1 christos isc_buffer_reinit(): 496 1.1 christos 497 1.1 christos p = UNCONST(xslmsg); isc_buffer_reinit(b, p, strlen(xslmsg)); 498 1.1 christos 499 1.1 christos isc_buffer_reinit() copies any pre-existing buffer content into the 500 1.1 christos new base with memmove(), so the call would write into xslmsg, which is 501 1.1 christos a 'const char[]' living in read-only memory. This is safe today only 502 1.1 christos because the supplied bodybuffer is always freshly initialized with 503 1.1 christos length 0, so the memmove() never runs -- a fragile, 504 1.1 christos action-at-a-distance invariant that GCC's -fanalyzer flags as a write 505 1.1 christos to a const object (-Wanalyzer-write-to-const). 506 1.1 christos 507 1.1 christos Use isc_buffer_constinit(), the primitive intended for pointing a 508 1.1 christos buffer at constant data: it goes through isc_buffer_init() and never 509 1.1 christos writes to the base. This drops the UNCONST cast, keeps xslmsg in 510 1.1 christos read-only memory, and silences the analyzer warning. 511 1.1 christos 512 1.1 christos Assisted-by: Claude:claude-opus-4-8 :gl:`!12309` 513 1.1 christos 514 1.1 christos - Don't serve a stale CNAME or record when fresh data of the other 515 1.1 christos exists. ``1cf6838c271`` 516 1.1 christos 517 1.1 christos When a cached name held both a CNAME and records of another type one 518 1.1 christos stale, the other still fresh named with serve-stale could return the 519 1.1 christos expired set instead of the fresh one, in either direction. It now 520 1.1 christos prefers whichever is fresh. :gl:`!12305` 521 1.1 christos 522 1.1 christos - Fix compatibility with OpenSSL 1.0.2u. ``11fcd8206ab`` 523 1.1 christos 524 1.1 christos BIND failed to build with OpenSSL 1.0.2u. Add the missing header file 525 1.1 christos includes. :gl:`!11897` 526 1.1 christos 527 1.1 christos - Only update the global tid_count once. ``746d9bfd3a8`` 528 1.1 christos 529 1.1 christos Skip updating the `tid_count` value on repeated calls to prevent 530 1.1 christos ThreadSanitizer 'data race'. :gl:`!12188` 531 1.1 christos 532 1.1 christos 533