changelog-9.20.24.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.24
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 - Fix DNS64 owner case after DNAME restart. ``4de2229364``
19 1.1 christos
20 1.1 christos When BIND 9 is configured to use DNS64 and encounters a DNAME
21 1.1 christos redirect, it could end up using freed memory for the DNS response
22 1.1 christos owner name. This caused the response to contain corrupted data. This
23 1.1 christos fix ensures the correct owner name is used when constructing the
24 1.1 christos synthesized response after a DNAME redirect.
25 1.1 christos
26 1.1 christos ISC thanks Qifan Zhang of Palo Alto Networks for reporting the issue.
27 1.1 christos :gl:`#5934`
28 1.1 christos
29 1.1 christos New Features
30 1.1 christos ~~~~~~~~~~~~
31 1.1 christos
32 1.1 christos - Enable PR-Agent reviews on merge requests. ``46e4c236a3``
33 1.1 christos
34 1.1 christos Adds a CI job that runs PR-Agent against each merge request opened
35 1.1 christos from the canonical repository, posting an automated review and
36 1.1 christos code-improvement suggestions as MR comments. The job is gated to
37 1.1 christos same-project source branches so the OpenAI key and personal access
38 1.1 christos token are not exposed to fork pipelines. :gl:`!12034`
39 1.1 christos
40 1.1 christos Removed Features
41 1.1 christos ~~~~~~~~~~~~~~~~
42 1.1 christos
43 1.1 christos - Remove ineffective TCP fallback after repeated UDP timeouts.
44 1.1 christos ``eb13adcb47``
45 1.1 christos
46 1.1 christos When an authoritative server failed to respond to two consecutive UDP
47 1.1 christos queries, named marked the next retry as TCP but still sent it over
48 1.1 christos UDP, producing misleading dnstap records. The ineffective retry path
49 1.1 christos has been removed; a corrected TCP fallback will be restored in future
50 1.1 christos BIND 9 versions. :gl:`#5529` :gl:`!12049`
51 1.1 christos
52 1.1 christos - Remove useless PR-Agent jobs. ``8851b279d0``
53 1.1 christos
54 1.1 christos The experiment was a failure, the PR-Agent doesn't send a full context
55 1.1 christos to the AI Agents and the results are abysmal because of that.
56 1.1 christos :gl:`!12120`
57 1.1 christos
58 1.1 christos Feature Changes
59 1.1 christos ~~~~~~~~~~~~~~~
60 1.1 christos
61 1.1 christos - Fall back to TCP on a UDP response with a mismatched query id.
62 1.1 christos ``b2367aaea2``
63 1.1 christos
64 1.1 christos BIND used to wait silently for the correct DNS message id on a UDP
65 1.1 christos fetch even after receiving a response from the expected server with
66 1.1 christos the wrong id, leaving room for off-path spoofing attempts to keep
67 1.1 christos guessing within that window. The resolver now retries the fetch over
68 1.1 christos TCP on the first such response, and a new MismatchTCP statistics
69 1.1 christos counter tracks how often the fallback fires. :gl:`#5449` :gl:`!12025`
70 1.1 christos
71 1.1 christos - Limit the number of glue records cached from a referral.
72 1.1 christos ``eb401f6b92``
73 1.1 christos
74 1.1 christos When a delegation response contained many glue addresses per listed
75 1.1 christos nameserver, all of them were cached without a per-nameserver bound,
76 1.1 christos inflating resolver cache memory beyond what resolution could ever use.
77 1.1 christos The cache now keeps at most 20 IPv4 and 20 IPv6 glue addresses per
78 1.1 christos nameserver from a delegation. :gl:`#5701` :gl:`!11972`
79 1.1 christos
80 1.1 christos - Fix a resolver stall on a CNAME response to a DS query. ``1407f48670``
81 1.1 christos
82 1.1 christos A validating resolver could stall for about twelve seconds and then
83 1.1 christos return SERVFAIL when an authoritative server answered a DS query with
84 1.1 christos a CNAME. Such responses are now rejected promptly, so the query fails
85 1.1 christos fast instead of hanging. :gl:`#5878` :gl:`!12147`
86 1.1 christos
87 1.1 christos - Named could crash on concurrent TKEY DELETE for the same key.
88 1.1 christos ``dd02abde67``
89 1.1 christos
90 1.1 christos On a server configured with tkey-gssapi-keytab (or
91 1.1 christos tkey-gssapi-credential), an authenticated peer could crash named by
92 1.1 christos sending two TKEY DELETE requests for the same dynamic key in rapid
93 1.1 christos succession. This has been fixed. :gl:`#6001` :gl:`!12042`
94 1.1 christos
95 1.1 christos Bug Fixes
96 1.1 christos ~~~~~~~~~
97 1.1 christos
98 1.1 christos - The resolver now removes other RRsets at the same name when caching a
99 1.1 christos CNAME. ``1547447491``
100 1.1 christos
101 1.1 christos When an RRset is in stale cache, and the authoritative server changes
102 1.1 christos the record type to CNAME, the resolver fails to refresh the stale
103 1.1 christos cache. This has been fixed. :gl:`#5302` :gl:`!12040`
104 1.1 christos
105 1.1 christos - Fix nxdomain-redirect combined with dns64. ``95274e9455``
106 1.1 christos
107 1.1 christos When a resolver was configured with both `nxdomain-redirect` and
108 1.1 christos `dns64` in the same view, an AAAA query for a nonexistent name could
109 1.1 christos abort `named`. The combination failed whenever the redirect zone held
110 1.1 christos A records but no AAAA records. The server now serves the empty AAAA
111 1.1 christos response from the redirect zone as-is, instead of attempting DNS64
112 1.1 christos synthesis on top of it. :gl:`#5789` :gl:`!12123`
113 1.1 christos
114 1.1 christos - Clear REDIRECT flag when it isn't needed. ``86bb27060c``
115 1.1 christos
116 1.1 christos When `nxdomain-redirect` is in use, and a recursive query is used to
117 1.1 christos get the redirected answer, a flag is set to distinguish it from a
118 1.1 christos normal recursive response. Previously, that flag was left set
119 1.1 christos afterward, which could trigger an assertion if a normal recursive
120 1.1 christos query was sent later on behalf of the same client: for example,
121 1.1 christos because the `filter-aaaa` plugin was in use. This has been fixed.
122 1.1 christos :gl:`#5936` :gl:`!12076`
123 1.1 christos
124 1.1 christos - Fix data race during rndc dumpdb or zone load. ``947e5c7983``
125 1.1 christos
126 1.1 christos 'rndc dumpdb' against a server with zones, and async zone load, had a
127 1.1 christos timing window where the operation's completion could fire before the
128 1.1 christos server had finished registering the operation, occasionally leading to
129 1.1 christos a possible crash. The completion is now delivered after the
130 1.1 christos registration is in place. :gl:`#5952` :gl:`!12021`
131 1.1 christos
132 1.1 christos - Bound memory use during incoming zone transfers. ``5d7f241fdf``
133 1.1 christos
134 1.1 christos During an incoming zone transfer, an optimization could let the batch
135 1.1 christos of pending records grow without bound for a large zone, raising memory
136 1.1 christos usage. It gave no measurable performance benefit, so it has been
137 1.1 christos removed. :gl:`#5958` :gl:`!12142`
138 1.1 christos
139 1.1 christos - Disable output escaping in bind9.xsl. ``b514e663eb``
140 1.1 christos
141 1.1 christos The statistics charts where not displaying on some browsers. This has
142 1.1 christos been fixed. :gl:`#5990` :gl:`!12019`
143 1.1 christos
144 1.1 christos - Fix crash on badly configured secondary signer. ``edc1ef084f``
145 1.1 christos
146 1.1 christos A badly configured secondary signer that was missing the 'file' entry
147 1.1 christos caused the server to crash, rather than to reject the configuration.
148 1.1 christos This has been fixed. :gl:`#5993` :gl:`!12112`
149 1.1 christos
150 1.1 christos - Avoid named assertion failure during parent-NS lookups when none
151 1.1 christos exist. ``5c0c4786dd``
152 1.1 christos
153 1.1 christos Configuring the root zone as a signed primary with parental agents (or
154 1.1 christos with notify-on-cds-changes) caused named to exit on an internal
155 1.1 christos assertion as soon as the DS-publication machinery tried to look up the
156 1.1 christos parent NS RRset the root has no parent. The lookup is now
157 1.1 christos short-circuited cleanly.
158 1.1 christos
159 1.1 christos Similar, a zone with no NS records in the parent caused named to exit
160 1.1 christos in the same way. :gl:`#5910` :gl:`#5996` :gl:`!12053`
161 1.1 christos
162 1.1 christos - Reject RRSIG records covering meta-types. ``7517e39504``
163 1.1 christos
164 1.1 christos A recursive resolver could accept and cache an RRSIG record whose
165 1.1 christos Type-Covered field names a meta-type (ANY, AXFR, IXFR, MAILA, MAILB),
166 1.1 christos even though no real RRset of those types ever exists. Such records are
167 1.1 christos now rejected by the DNS message parser. :gl:`#6002` :gl:`!12051`
168 1.1 christos
169 1.1 christos - Validate nsec3hash arguments instead of relying on atoi()
170 1.1 christos ``a59080c053``
171 1.1 christos
172 1.1 christos The nsec3hash tool parsed its algorithm, flags, and iterations
173 1.1 christos arguments with atoi(), then range-checked the result. For values that
174 1.1 christos overflow int during digit-by-digit accumulation, atoi() is undefined;
175 1.1 christos in practice on musl libc the modular wrap leaves n == 0, which
176 1.1 christos silently passes the "iterations > 0xffffU" check. On Alpine Linux this
177 1.1 christos made nsec3hash succeed with iterations treated as 0 for inputs like
178 1.1 christos 4294967296 (2^32).
179 1.1 christos
180 1.1 christos The latent bug only surfaced when the recent image rebuild pulled in
181 1.1 christos Hypothesis 6.152.9 (2026-05-19), which unified the distribution used
182 1.1 christos for bounded and unbounded integers() strategies. The new smoother
183 1.1 christos distribution explores the 2^32 boundary on unbounded ranges like
184 1.1 christos integers(min_value=65536); earlier versions did not reach there, so
185 1.1 christos test_nsec3hash_too_many_iterations only started failing on Alpine
186 1.1 christos after the image refresh.
187 1.1 christos
188 1.1 christos Replace the three atoi() calls with isc_parse_uint8 /
189 1.1 christos isc_parse_uint16, which uniformly reject overflow, trailing garbage,
190 1.1 christos leading sign, and non-numeric input across libc implementations. As a
191 1.1 christos side effect, error messages now include the offending argument and a
192 1.1 christos specific reason ("out of range" vs "not a valid number").
193 1.1 christos
194 1.1 christos Assisted-by: Claude:claude-opus-4-7 :gl:`#6013` :gl:`!12074`
195 1.1 christos
196 1.1 christos - Fix wrong variable in named_server_sync() log message. ``09f9889ef6``
197 1.1 christos
198 1.1 christos named_server_sync() logged isc_result_totext(result) but returns
199 1.1 christos tresult. The loop accumulates errors into tresult, so result only
200 1.1 christos holds the last iteration's value. If the last view succeeded but an
201 1.1 christos earlier one failed, the log would incorrectly say "success".
202 1.1 christos :gl:`!12156`
203 1.1 christos
204 1.1 christos - Refine resolver fetch loop detection. ``787faa02a7``
205 1.1 christos
206 1.1 christos The resolver's fetch loop detection now triggers only when a new fetch
207 1.1 christos would join an already in-flight fetch that is also one of its own
208 1.1 christos ancestors, which is the actual loop condition. Previously the check
209 1.1 christos ran against the original request before the fetch was set up.
210 1.1 christos :gl:`!12146`
211 1.1 christos
212 1.1 christos
213