Home | History | Annotate | Line # | Download | only in changelog
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