changelog-9.20.26.rst revision 1.1 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