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