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.27 13 1.1 christos ------------ 14 1.1 christos 15 1.1 christos New Features 16 1.1 christos ~~~~~~~~~~~~ 17 1.1 christos 18 1.1 christos - Disclose active Negative Trust Anchors with Extended DNS Error 33. 19 1.1 christos ``566e7018278`` 20 1.1 christos 21 1.1 christos A Negative Trust Anchor (RFC 7646) turns off DNSSEC validation for a 22 1.1 christos domain, so a name that would normally fail validation resolves 23 1.1 christos instead. named now marks such answers with Extended DNS Error code 33, 24 1.1 christos "Negative Trust Anchor", so operators can see at a glance when a 25 1.1 christos response came back only because an NTA was in effect. :gl:`#6268` 26 1.1 christos :gl:`!12426` 27 1.1 christos 28 1.1 christos - Add development guidance for AI coding agents under .agents/skills/ 29 1.1 christos ``ef651c93709`` 30 1.1 christos 31 1.1 christos This adds a set of skill documents that give AI coding agents the 32 1.1 christos project's established practices up front instead of having them 33 1.1 christos rediscovered (or gotten wrong) in every session: the canonical build 34 1.1 christos and test invocations, the memory-allocator contract, the disciplines 35 1.1 christos for RCU mutation, per-loop sharded structures, struct-layout work, and 36 1.1 christos flight-recorder debugging of concurrency bugs, plus the commit and 37 1.1 christos merge-request conventions. :gl:`!12401` 38 1.1 christos 39 1.1 christos - Add more unit tests for isc_time API. ``9d6855ef735`` 40 1.1 christos 41 1.1 christos While working on internal 64-bit time for BIND 9, the unit test suite 42 1.1 christos for isc_time API has been extended. 43 1.1 christos 44 1.1 christos Backport the unit tests from 64-bit time branch to the main branch. 45 1.1 christos This should make the unit tests for isc_time API (mostly) complete. 46 1.1 christos 47 1.1 christos Related to #2959 :gl:`!12432` 48 1.1 christos 49 1.1 christos Feature Changes 50 1.1 christos ~~~~~~~~~~~~~~~ 51 1.1 christos 52 1.1 christos - Batch qp transaction for RPZ updates. ``cb40fb91fa2`` 53 1.1 christos 54 1.1 christos RPZ was built around fine-grained locking, but that forces the use of 55 1.1 christos many small qp transactions. With this MR, we switch qp transaction to 56 1.1 christos handle the full update to the rpz summary structure. While this 57 1.1 christos serializes the RPZ updates, the reduced overhead from batching qp 58 1.1 christos transactions more than compensates for it and results in improvements 59 1.1 christos for big RPZ zones. :gl:`#5787`, #6270 :gl:`!12493` 60 1.1 christos 61 1.1 christos - Pass the work callback result to the done callback. ``65cdb7c7613`` 62 1.1 christos 63 1.1 christos The `isc_work` callback now returns `isc_result_t` and the value is 64 1.1 christos handed to the done callback, so the callers no longer need their own 65 1.1 christos result-passing state. :gl:`!12391` 66 1.1 christos 67 1.1 christos Bug Fixes 68 1.1 christos ~~~~~~~~~ 69 1.1 christos 70 1.1 christos - Dig +yaml producing invalid YAML when a lookup fails. ``65d1776959e`` 71 1.1 christos 72 1.1 christos When "dig +yaml" was run and no server could be reached, dig printed 73 1.1 christos its plain-text startup banner (the "; \<\<\>\> DiG ..." and ";; global 74 1.1 christos options" lines) ahead of the machine-readable output, so the result 75 1.1 christos was not valid YAML and could not be parsed. dig no longer emits that 76 1.1 christos banner in YAML mode. As part of the same change, the banner is now 77 1.1 christos built only after the whole command line has been read, so options 78 1.1 christos given after the query name (such as +nocmd, +short and +yaml) are 79 1.1 christos correctly reflected in it. :gl:`#1230` :gl:`!12430` 80 1.1 christos 81 1.1 christos - Ensure NSEC authority does not cross zonecut boundary. ``0baaddd096a`` 82 1.1 christos 83 1.1 christos When using a cached NSEC record to prove that a delegation is 84 1.1 christos insecure, we now check that the signer name in the corresponding RRSIG 85 1.1 christos is not above a known secure delegation point. This prevents a signed 86 1.1 christos namespace from being downgraded to insecure using an NSEC record from 87 1.1 christos the grandparent zone. :gl:`#5967` :gl:`!12394` 88 1.1 christos 89 1.1 christos - Treat non canonical RPZ prefixes as any other failure. ``17f0828b460`` 90 1.1 christos 91 1.1 christos RPZ prefixes that were not encoded in canonical form do not work. 92 1.1 christos Treat them as any other encoding error. :gl:`#6043` :gl:`!12482` 93 1.1 christos 94 1.1 christos - Properly prevent TSIG generation command line injection attacks. 95 1.1 christos ``f777451d261`` 96 1.1 christos 97 1.1 christos When key names are generated with `rndc-confgen`, `tsig-keygen` and 98 1.1 christos `ddns-confgen`, special characters must be escaped to ensure the 99 1.1 christos configuration is parsed correctly. :gl:`#6071` :gl:`!12396` 100 1.1 christos 101 1.1 christos - Dig with IDN output could leak memory on ISC_R_NOSPACE retry. 102 1.1 christos ``c4e53b59b2e`` 103 1.1 christos 104 1.1 christos The IDN to text display call back could leak the memory holding the 105 1.1 christos converted name if it did not fit into the buffer. This has been 106 1.1 christos fixed. :gl:`#6073` :gl:`!12483` 107 1.1 christos 108 1.1 christos - Dnssec-signzone had a potential heap bounds overflow write. 109 1.1 christos ``994c3bd4323`` 110 1.1 christos 111 1.1 christos It was possible for `dnssec-signzone` to overflow array bounds while 112 1.1 christos signing. This has been fixed. :gl:`#6076` :gl:`!12503` 113 1.1 christos 114 1.1 christos - Restore SMF support on Solaris and illumos. ``8bde9318f63`` 115 1.1 christos 116 1.1 christos SMF support on Solaris and illumos was silently dropped by a build 117 1.1 christos system rewrite in 2018; it is now detected and enabled again. 118 1.1 christos :gl:`#6096` :gl:`!12456` 119 1.1 christos 120 1.1 christos - Fix NULL pointer dereference in dnstap-read. ``9c459b1854d`` 121 1.1 christos 122 1.1 christos It was possible to dereference a NULL pointer in dnstap-read causing 123 1.1 christos it to exit on a malformed DNSTAP file. This has been fixed. 124 1.1 christos :gl:`#6124` :gl:`!12494` 125 1.1 christos 126 1.1 christos - Change catz coo locking. ``78265c8f6fc`` 127 1.1 christos 128 1.1 christos Catalog zones might need to inspect the change-of-ownership records of 129 1.1 christos other catalog zones, which required to release the lock in the middle 130 1.1 christos of certain operations, leading to possible race conditions. 131 1.1 christos 132 1.1 christos Since the operations on change-of-ownership records are limited, we 133 1.1 christos can instead use a design with a second lock protecting the 134 1.1 christos change-of-ownership records on read. We structure the API so that 135 1.1 christos holding two change-of-ownership locks at the same time is impossible. 136 1.1 christos :gl:`#6131` :gl:`!12410` 137 1.1 christos 138 1.1 christos - Treat an unusable NSEC3 chain as a verification failure. 139 1.1 christos ``879a383ef16`` 140 1.1 christos 141 1.1 christos When transferring in a mirror zone, DNSSEC verification could 142 1.1 christos incorrectly succeed when the zone had an invalid `NSEC3PARAM` record, 143 1.1 christos leading to subsequent validation failures. This has been fixed. 144 1.1 christos :gl:`#6136` :gl:`!12431` 145 1.1 christos 146 1.1 christos - Unterminated OpenSSL private-key `Label:` field can be read past its 147 1.1 christos parser buffer. ``932581b74bd`` 148 1.1 christos 149 1.1 christos Check that the string encoded in the Label: field of the .private file 150 1.1 christos of a key pair is NUL terminated and the correct length. Reject the 151 1.1 christos .private file if it is not. :gl:`#6193` :gl:`!12417` 152 1.1 christos 153 1.1 christos - Negative caching stopped working with stale-answer-client-timeout 0. 154 1.1 christos ``2687d16ed2f`` 155 1.1 christos 156 1.1 christos With "stale-answer-client-timeout 0" configured, every client query 157 1.1 christos for a name cached as NXDOMAIN or NODATA was sent on to the 158 1.1 christos authoritative servers, even while the cached negative answer was still 159 1.1 christos within its TTL, so the resolver effectively lost negative caching. 160 1.1 christos Negative answers are now refreshed only once they have actually gone 161 1.1 christos stale. :gl:`#6245` :gl:`!12384` 162 1.1 christos 163 1.1 christos - MacOS byte swapping macros already defined. ``5c1d3df49c0`` 164 1.1 christos 165 1.1 christos Don't redefine them if the development environment already defines 166 1.1 christos them. :gl:`#6250` :gl:`!12406` 167 1.1 christos 168 1.1 christos - Use memmove in isc_sockaddr_fromin/isc_sockaddr_fromin6. 169 1.1 christos ``3f3c82292c9`` 170 1.1 christos 171 1.1 christos Use memmove instead of direct assignment from the source pointer 172 1.1 christos because the source pointer is not guaranteed to be correctly aligned. 173 1.1 christos :gl:`#6260` :gl:`!12449` 174 1.1 christos 175 1.1 christos - Fix compilation on GNU/Hurd. ``20f5580e017`` 176 1.1 christos 177 1.1 christos Fix compilation issues on GNU/Hurd. :gl:`#6285` :gl:`!12496` 178 1.1 christos 179 1.1 christos - Restore arc4random() detection dropped in the v9.21.14 merge. 180 1.1 christos ``86ad6866eeb`` 181 1.1 christos 182 1.1 christos Commit 4db9e5d90e2 ("Use arc4random for CSPRNG when available", part 183 1.1 christos of the CVE-2025-40780 fix) guarded the arc4random() code paths in 184 1.1 christos lib/isc/random.h and lib/isc/random.c with HAVE_ARC4RANDOM and added 185 1.1 christos the corresponding function check to meson.build. The manual conflict 186 1.1 christos resolution in merge c2a672bbaef ("Merge tag 'v9.21.14'") kept the code 187 1.1 christos changes but dropped the meson.build hunk, so HAVE_ARC4RANDOM was never 188 1.1 christos defined and platforms with arc4random() (macOS and the BSDs) silently 189 1.1 christos fell back to the internal ChaCha-based CSPRNG. Restore the check. 190 1.1 christos 191 1.1 christos Assisted-by: Claude:claude-fable-5 :gl:`!12452` 192 1.1 christos 193 1.1 christos 194