]> git.ipfire.org Git - thirdparty/bind9.git/log
thirdparty/bind9.git
23 months agoTweak and reword release notes
Nicki Křížek [Wed, 12 Jun 2024 12:05:05 +0000 (14:05 +0200)] 
Tweak and reword release notes

23 months agoAdd release note for [GL #4708]
Nicki Křížek [Wed, 12 Jun 2024 11:49:02 +0000 (13:49 +0200)] 
Add release note for [GL #4708]

23 months agoAdd release note for [GL #4736]
Nicki Křížek [Wed, 12 Jun 2024 11:48:06 +0000 (13:48 +0200)] 
Add release note for [GL #4736]

23 months agoAdd release note for [GL #3472]
Nicki Křížek [Wed, 12 Jun 2024 11:36:56 +0000 (13:36 +0200)] 
Add release note for [GL #3472]

23 months agoPrepare release notes for BIND 9.19.25
Nicki Křížek [Wed, 12 Jun 2024 11:34:21 +0000 (13:34 +0200)] 
Prepare release notes for BIND 9.19.25

This version won't be released. This commit is just a preparation for
9.20.0.

23 months agoAdd another placeholder for [GL #4480]
Nicki Křížek [Tue, 11 Jun 2024 07:30:47 +0000 (09:30 +0200)] 
Add another placeholder for [GL #4480]

(cherry picked from commit 1680916d6709dce8c45e49079b37f19a2f09297c)

23 months agoMerge branch 'tcp-reset-connection-on-failed-send' into 'v9.20.0-release'
Nicki Křížek [Wed, 3 Jul 2024 15:50:58 +0000 (15:50 +0000)] 
Merge branch 'tcp-reset-connection-on-failed-send' into 'v9.20.0-release'

[CVE-2024-0760 (part 3)] Reset the TCP connection on a failed send

See merge request isc-private/bind9!721

23 months agoDrop expired but not accepted TCP connections
Artem Boldariev [Tue, 2 Jul 2024 13:16:59 +0000 (16:16 +0300)] 
Drop expired but not accepted TCP connections

This commit ensures that we are not attempting to accept an expired
TCP connection as we are not interested in any data that could have
been accumulated in its internal buffers. Now we just drop them for
good.

23 months agoReset the TCP connection on a failed send
Ondřej Surý [Tue, 2 Jul 2024 18:17:49 +0000 (20:17 +0200)] 
Reset the TCP connection on a failed send

When sending fails, the ns__client_request() would not reset the
connection and continue as nothing is happening.  This comes from the
model that we don't care about failed UDP sends because datagrams are
unreliable anyway, but it greatly affects TCP connections with
keep-alive.

The worst case scenario is as follows:

1. the 3-way TCP handshake gets completed
2. the libuv calls the "uv_connection_cb" callback
3. the TCP connection gets queue because of the tcp-clients quota
4. the TCP client sends as many DNS messages as the buffers allow
5. the TCP connection gets dropped by the client due to the timeout
6. the TCP connection gets accepted by the server
7. the data already sent by the client gets read
8. all sending fails immediately because the TCP connection is dead
9. we consume all the data in the buffer in a very tight loop

As it doesn't make sense to trying to process more data on the TCP
connection when the sending is failing, drop the connection immediately
on the first sending error.

23 months agoRemove ns_query_init() cannot fail, remove the error paths
Ondřej Surý [Tue, 2 Jul 2024 18:17:49 +0000 (20:17 +0200)] 
Remove ns_query_init() cannot fail, remove the error paths

As ns_query_init() cannot fail now, remove the error paths, especially
in ns__client_setup() where we now don't have to care what to do with
the connection if setting up the client could fail.  It couldn't fail
even before, but now it's formal.

23 months agoThrottle the reading when writes are asynchronous
Ondřej Surý [Tue, 2 Jul 2024 18:17:49 +0000 (20:17 +0200)] 
Throttle the reading when writes are asynchronous

Be more aggressive when throttling the reading - when we can't send the
outgoing TCP synchronously with uv_try_write(), we start throttling the
reading immediately instead of waiting for the send buffers to fill up.

This should not affect behaved clients that read the data from the TCP
on the other end.

23 months agoMerge branch '3405-security-limit-the-number-of-resource-records-in-rrset-nxdomain...
Nicki Křížek [Tue, 2 Jul 2024 11:05:37 +0000 (11:05 +0000)] 
Merge branch '3405-security-limit-the-number-of-resource-records-in-rrset-nxdomain' into 'v9.20.0-release'

[CVE-2024-1737 (part 2)] Be smarter about refusing to add many RR types to the database

See merge request isc-private/bind9!712

23 months agoAdd more tests for adding many RR types to the database
Ondřej Surý [Mon, 17 Jun 2024 09:40:40 +0000 (11:40 +0200)] 
Add more tests for adding many RR types to the database

More reclimit tests that test various scenarios adding combinations of
priority and non-priority RR types into the database.

23 months agoBe smarter about refusing to add many RR types to the database
Ondřej Surý [Mon, 17 Jun 2024 09:40:40 +0000 (11:40 +0200)] 
Be smarter about refusing to add many RR types to the database

Instead of outright refusing to add new RR types to the cache, be a bit
smarter:

1. If the new header type is in our priority list, we always add either
   positive or negative entry at the beginning of the list.

2. If the new header type is negative entry, and we are over the limit,
   we mark it as ancient immediately, so it gets evicted from the cache
   as soon as possible.

3. Otherwise add the new header after the priority headers (or at the
   head of the list).

4. If we are over the limit, evict the last entry on the normal header
   list.

23 months agoMake the resolver qtype ANY test order agnostic
Ondřej Surý [Mon, 17 Jun 2024 15:54:09 +0000 (17:54 +0200)] 
Make the resolver qtype ANY test order agnostic

Instead of relying on a specific order of the RR types in the databases
pick the first RR type as returned from the cache.

23 months agoExpand the list of the priority types and move it to db_p.h
Ondřej Surý [Mon, 17 Jun 2024 09:40:40 +0000 (11:40 +0200)] 
Expand the list of the priority types and move it to db_p.h

Add HTTPS, SVCB, SRV, PTR, NAPTR, DNSKEY and TXT records to the list of
the priority types that are put at the beginning of the slabheader list
for faster access and to avoid eviction when there are more types than
the max-types-per-name limit.

23 months agoMerge branch 'tcp-do-not-unthrottle-on_isc_nm_read' into 'v9.20.0-release'
Nicki Křížek [Tue, 25 Jun 2024 08:54:47 +0000 (08:54 +0000)] 
Merge branch 'tcp-do-not-unthrottle-on_isc_nm_read' into 'v9.20.0-release'

[CVE-2024-0760 (part 2)] Do not un-throttle TCP connections on isc_nm_read()

See merge request isc-private/bind9!708

2 years agoDo not un-throttle TCP connections on isc_nm_read()
Artem Boldariev [Tue, 11 Jun 2024 14:20:22 +0000 (17:20 +0300)] 
Do not un-throttle TCP connections on isc_nm_read()

Due to omission it was possible to un-throttle a TCP connection
previously throttled due to the peer not reading back data we are
sending.

In particular, that affected DoH code, but it could also affect other
transports (the current or future ones) that pause/resume reading
according to its internal state.

2 years agoMerge branch 'nicki/add-another-placeholder-for-4480' into 'main'
Nicki Křížek [Tue, 11 Jun 2024 07:33:46 +0000 (07:33 +0000)] 
Merge branch 'nicki/add-another-placeholder-for-4480' into 'main'

Add another placeholder for [GL #4480]

See merge request isc-projects/bind9!9100

2 years agoAdd another placeholder for [GL #4480]
Nicki Křížek [Tue, 11 Jun 2024 07:30:47 +0000 (09:30 +0200)] 
Add another placeholder for [GL #4480]

2 years agoMerge branch 'nicki/add-placeholder-entries' into 'main'
Nicki Křížek [Mon, 10 Jun 2024 15:52:21 +0000 (15:52 +0000)] 
Merge branch 'nicki/add-placeholder-entries' into 'main'

Add placeholder entries to CHANGES

See merge request isc-projects/bind9!9096

2 years agoMerge branch '4507-confidential-clear-zversion' into 'v9.20.0-release'
Nicki Křížek [Mon, 10 Jun 2024 15:51:03 +0000 (15:51 +0000)] 
Merge branch '4507-confidential-clear-zversion' into 'v9.20.0-release'

[CVE-2024-4076] serve-stale zversion crash

See merge request isc-private/bind9!631

2 years agoAdd release note for [GL #4507]
Matthijs Mekking [Thu, 2 May 2024 14:30:30 +0000 (16:30 +0200)] 
Add release note for [GL #4507]

2 years agoAdd CHANGES note for [GL #4507]
Mark Andrews [Tue, 16 Jan 2024 03:36:12 +0000 (14:36 +1100)] 
Add CHANGES note for [GL #4507]

2 years agoClear qctx->zversion
Mark Andrews [Tue, 16 Jan 2024 03:25:27 +0000 (14:25 +1100)] 
Clear qctx->zversion

Clear qctx->zversion when clearing qctx->zrdataset et al in
lib/ns/query.c:qctx_freedata.  The uncleared pointer could lead to
an assertion failure if zone data needed to be re-saved which could
happen with stale data support enabled.

2 years agoMerge branch '4480-sig0-can-be-used-to-exhaust-cpu-resources-v6' into 'v9.20.0-release'
Nicki Křížek [Mon, 10 Jun 2024 15:44:34 +0000 (15:44 +0000)] 
Merge branch '4480-sig0-can-be-used-to-exhaust-cpu-resources-v6' into 'v9.20.0-release'

[CVE-2024-1975] Mitigate SIG(0) CPU resources exhaustion attack vectors

See merge request isc-private/bind9!689

2 years agoRequire local KEYs for SIG(0) verification
Petr Špaček [Tue, 4 Jun 2024 16:41:44 +0000 (18:41 +0200)] 
Require local KEYs for SIG(0) verification

This is additional hardening. There is no known use-case for KEY RRs
from DNS cache and it potentially allows attackers to put weird keys
into cache.

2 years agoMark SIG(0) quota settings as experimantal
Aram Sargsyan [Mon, 3 Jun 2024 10:56:02 +0000 (10:56 +0000)] 
Mark SIG(0) quota settings as experimantal

A different solution in the future might be adopted depending
on feedback and other new information, so it makes sense to mark
these options as EXPERIMENTAL until we have more data.

2 years agoAvoid running get_matching_view() asynchronously on an error path
Aram Sargsyan [Mon, 3 Jun 2024 10:49:46 +0000 (10:49 +0000)] 
Avoid running get_matching_view() asynchronously on an error path

Also create a new ns_client_async_reset() static function to decrease
code duplication.

2 years agoTest that named checks maximum two keys for SIG(0)-signed messages
Aram Sargsyan [Wed, 22 May 2024 13:07:21 +0000 (13:07 +0000)] 
Test that named checks maximum two keys for SIG(0)-signed messages

Send three updates with three different keys, and expect that one
of them should fail.

Also retain more artifacts for neighboring nsupdate calls.

2 years agoAdd a release note for [GL #4480]
Aram Sargsyan [Wed, 27 Mar 2024 14:59:57 +0000 (14:59 +0000)] 
Add a release note for [GL #4480]

2 years agoAdd a CHANGES note for [GL #4480]
Aram Sargsyan [Wed, 27 Mar 2024 14:59:37 +0000 (14:59 +0000)] 
Add a CHANGES note for [GL #4480]

2 years agoLimit the number of keys for SIG(0) message verification
Aram Sargsyan [Wed, 15 May 2024 12:57:56 +0000 (12:57 +0000)] 
Limit the number of keys for SIG(0) message verification

Check at most two KEY RRs agains a SIG(0) signature. This should
limit potential abuse and at the same time allow key rollover.

2 years agoRun resolver message signature checking asynchronously
Aram Sargsyan [Wed, 6 Mar 2024 11:08:52 +0000 (11:08 +0000)] 
Run resolver message signature checking asynchronously

2 years agoRemove sig0checks-quota-maxwait-ms support
Aram Sargsyan [Thu, 9 May 2024 17:06:14 +0000 (17:06 +0000)] 
Remove sig0checks-quota-maxwait-ms support

Waiting for a quota to appear complicates things and wastes
rosources on timer management. Just answer with REFUSE if
there is no quota.

2 years agoImplement asynchronous view matching for SIG(0)-signed queries
Aram Sargsyan [Wed, 8 May 2024 18:42:48 +0000 (18:42 +0000)] 
Implement asynchronous view matching for SIG(0)-signed queries

View matching on an incoming query checks the query's signature,
which can be a CPU-heavy task for a SIG(0)-signed message. Implement
an asynchronous mode of the view matching function which uses the
offloaded signature checking facilities, and use it for the incoming
queries.

2 years agoImplement asynchronous message signature verification
Aram Sargsyan [Wed, 6 Mar 2024 11:06:27 +0000 (11:06 +0000)] 
Implement asynchronous message signature verification

Add support for using the offload threadpool to perform message
signature verifications. This should allow check SIG(0)-signed
messages without affecting the worker threads.

2 years agoRemove dns_message_rechecksig()
Aram Sargsyan [Tue, 5 Mar 2024 10:11:43 +0000 (10:11 +0000)] 
Remove dns_message_rechecksig()

This is a tiny helper function which is used only once and can be
replaced with two function calls instead. Removing this makes
supporting asynchronous signature checking less complicated.

2 years agoDocument the SIG(0) signature checking quota options
Aram Sargsyan [Wed, 27 Mar 2024 15:22:28 +0000 (15:22 +0000)] 
Document the SIG(0) signature checking quota options

Add documentation entries for the 'sig0checks-quota',
'sig0checks-quota-maxwait-ms', and 'sig0checks-quota-exempt'
optoins.

2 years agoAdd a quota for SIG(0) signature checks
Aram Sargsyan [Mon, 25 Mar 2024 11:07:47 +0000 (11:07 +0000)] 
Add a quota for SIG(0) signature checks

In order to protect from a malicious DNS client that sends many
queries with a SIG(0)-signed message, add a quota of simultaneously
running SIG(0) checks.

This protection can only help when named is using more than one worker
threads. For example, if named is running with the '-n 4' option, and
'sig0checks-quota 2;' is used, then named will make sure to not use
more than 2 workers for the SIG(0) signature checks in parallel, thus
leaving the other workers to serve the remaining clients which do not
use SIG(0)-signed messages.

That limitation is going to change when SIG(0) signature checks are
offloaded to "slow" threads in a future commit.

The 'sig0checks-quota-exempt' ACL option can be used to exempt certain
clients from the quota requirements using their IP or network addresses.

The 'sig0checks-quota-maxwait-ms' option is used to define a maximum
amount of time for named to wait for a quota to appear. If during that
time no new quota becomes available, named will answer to the client
with DNS_R_REFUSED.

2 years agoMerge branch '3405-security-limit-the-number-of-resource-records-in-rrset' into ...
Nicki Křížek [Mon, 10 Jun 2024 15:01:48 +0000 (15:01 +0000)] 
Merge branch '3405-security-limit-the-number-of-resource-records-in-rrset' into 'v9.20.0-release'

Limit the number of RRs in RRSets

See merge request isc-private/bind9!694

2 years agoAdd CHANGES and release note for [GL #3403]
Evan Hunt [Fri, 24 May 2024 02:16:54 +0000 (19:16 -0700)] 
Add CHANGES and release note for [GL #3403]

2 years agoLog rekey failure as error if too many records
Matthijs Mekking [Mon, 3 Jun 2024 06:00:27 +0000 (08:00 +0200)] 
Log rekey failure as error if too many records

By default we log a rekey failure on debug level. We should probably
change the log level to error. We make an exception for when the zone
is not loaded yet, it often happens at startup that a rekey is
run before the zone is fully loaded.

2 years agoLog error when update fails
Matthijs Mekking [Mon, 3 Jun 2024 05:56:21 +0000 (07:56 +0200)] 
Log error when update fails

The new "too many records" error can make an update fail without the
error being logged. This commit fixes that.

2 years agofix a memory leak that could occur when signing
Evan Hunt [Sat, 1 Jun 2024 00:16:29 +0000 (17:16 -0700)] 
fix a memory leak that could occur when signing

when signatures were not added because of too many types already
existing at a node, the diff was not being cleaned up; this led to
a memory leak being reported at shutdown.

2 years agoAdd new test cases with DNSSEC signing
Matthijs Mekking [Fri, 31 May 2024 11:08:38 +0000 (13:08 +0200)] 
Add new test cases with DNSSEC signing

kasp-max-types-per-name (named2.conf.in):
An unsigned zone with RR type count on a name right below the
configured limit. Then sign the zone using KASP. Adding a RRSIG would
push it over the RR type limit per name. Signing should fail, but
the server should not crash, nor end up in infinite resign-attempt loop.

kasp-max-records-per-type-dnskey (named1.conf.in):
Test with low max-record-per-rrset limit and a DNSSEC policy requiring
more than the limit. Signing should fail.

kasp-max-types-per-name (named1.conf.in):
Each RRSIG(covered type) is counted as an individual RR type. Test the
corner case where a signed zone, which is just below the limit-1,
adds a new type - doing so would trigger signing for the new type and
thus increase the number of "types" by 2, pushing it over the limit
again.

2 years agoCheck if restart works
Matthijs Mekking [Thu, 30 May 2024 13:41:32 +0000 (15:41 +0200)] 
Check if restart works

2 years agoSwitch to inline-signing no
Matthijs Mekking [Thu, 30 May 2024 13:41:12 +0000 (15:41 +0200)] 
Switch to inline-signing no

2 years agoAdd test cases that use DNSSEC signing
Matthijs Mekking [Thu, 30 May 2024 10:26:03 +0000 (12:26 +0200)] 
Add test cases that use DNSSEC signing

Add two new masterformat tests that use signing. In the case of
'under-limit-kasp', the signing will keep the number of records in the
RRset under the limit. In the case of 'on-limit-kasp', the signing
will push the number of records in the RRset over the limit, because
of the added RRSIG record.

2 years agoRemove duplicated empty zone files
Petr Špaček [Wed, 29 May 2024 19:03:02 +0000 (21:03 +0200)] 
Remove duplicated empty zone files

2 years agomasterformat: rename zone names to reflect intended meaning
Petr Špaček [Wed, 29 May 2024 16:28:58 +0000 (18:28 +0200)] 
masterformat: rename zone names to reflect intended meaning

2 years agoTest owner name rename: a b c d e -> <number>-txt
Petr Špaček [Wed, 29 May 2024 16:20:00 +0000 (18:20 +0200)] 
Test owner name rename: a b c d e -> <number>-txt

2 years agoTest variable rename i->_attempt
Petr Špaček [Wed, 29 May 2024 16:13:47 +0000 (18:13 +0200)] 
Test variable rename i->_attempt

2 years agoTest variable rename a->rrcount
Petr Špaček [Wed, 29 May 2024 16:12:29 +0000 (18:12 +0200)] 
Test variable rename a->rrcount

2 years agoAdd test for not-loading many RRsets per name on a secondary
Ondřej Surý [Tue, 28 May 2024 14:13:53 +0000 (16:13 +0200)] 
Add test for not-loading many RRsets per name on a secondary

This tests makes sure the zone with many RRsets per name is not loaded
via XFR on the secondary server.

2 years agoAdd a test for not caching large number of RRsets
Ondřej Surý [Tue, 28 May 2024 13:23:24 +0000 (15:23 +0200)] 
Add a test for not caching large number of RRsets

Send a recursive query for a large number of RRsets, which should
fail when using the default max-types-per-name setting of 100, but
succeed when the cap is disabled.

2 years agoAdd a limit to the number of RR types for single name
Ondřej Surý [Sat, 25 May 2024 09:46:56 +0000 (11:46 +0200)] 
Add a limit to the number of RR types for single name

Previously, the number of RR types for a single owner name was limited
only by the maximum number of the types (64k).  As the data structure
that holds the RR types for the database node is just a linked list, and
there are places where we just walk through the whole list (again and
again), adding a large number of RR types for a single owner named with
would slow down processing of such name (database node).

Add a configurable limit to cap the number of the RR types for a single
owner.  This is enforced at the database (rbtdb, qpzone, qpcache) level
and configured with new max-types-per-name configuration option that
can be configured globally, per-view and per-zone.

2 years agoAdd a test for not caching large RRset
Evan Hunt [Fri, 24 May 2024 02:07:34 +0000 (19:07 -0700)] 
Add a test for not caching large RRset

Send a recursive query for a large (2500 record) RRset, which should
fail when using the default max-records-per-type setting of 100, but
succeed when the cap is disabled.

2 years agoAdd test for not-loading and not-transfering huge RRSets
Ondřej Surý [Thu, 23 May 2024 17:12:40 +0000 (19:12 +0200)] 
Add test for not-loading and not-transfering huge RRSets

Add two new masterformat tests - the 'huge' zone fits within the ns1
limit and loads on the primary ns1 server, but must not transfer to the
ns2 secondary, and the 'uber' zone should not even load on the primary
ns1 server.

2 years agoAdd a limit to the number of RRs in RRSets
Ondřej Surý [Fri, 1 Mar 2024 07:26:07 +0000 (08:26 +0100)] 
Add a limit to the number of RRs in RRSets

Previously, the number of RRs in the RRSets were internally unlimited.
As the data structure that holds the RRs is just a linked list, and
there are places where we just walk through all of the RRs, adding an
RRSet with huge number of RRs inside would slow down processing of said
RRSets.

Add a configurable limit to cap the number of the RRs in a single RRSet.
This is enforced at the database (rbtdb, qpzone, qpcache) level and
configured with new max-records-per-type configuration option that can
be configured globally, per-view and per-zone.

2 years agoMerge branch '4481-security-tcp-flood' into 'v9.20.0-release'
Nicki Křížek [Mon, 10 Jun 2024 14:53:12 +0000 (14:53 +0000)] 
Merge branch '4481-security-tcp-flood' into 'v9.20.0-release'

[CVE-2024-0760] Throttle reading from TCP if the sends are not getting through

See merge request isc-private/bind9!639

2 years agoAdd CHANGES and release note for [GL #4481]
Ondřej Surý [Fri, 19 Jan 2024 20:11:32 +0000 (21:11 +0100)] 
Add CHANGES and release note for [GL #4481]

2 years agoRemove the extra memory context with own arena for sending
Ondřej Surý [Tue, 4 Jun 2024 09:21:24 +0000 (11:21 +0200)] 
Remove the extra memory context with own arena for sending

The changes in this MR prevent the memory used for sending the outgoing
TCP requests to spike so much.  That strictly remove the extra need for
own memory context, and thus since we generally prefer simplicity,
remove the extra memory context with own jemalloc arenas just for the
outgoing send buffers.

2 years agoLimit the number of DNS message processed from a single TCP read
Ondřej Surý [Tue, 4 Jun 2024 07:12:45 +0000 (09:12 +0200)] 
Limit the number of DNS message processed from a single TCP read

The single TCP read can create as much as 64k divided by the minimum
size of the DNS message.  This can clog the processing thread and trash
the memory allocator because we need to do as much as ~20k allocations in
a single UV loop tick.

Limit the number of the DNS messages processed in a single UV loop tick
to just single DNS message and limit the number of the outstanding DNS
messages back to 23.  This effectively limits the number of pipelined
DNS messages to that number (this is the limit we already had before).

2 years agoReplace the tcp_buffers memory pool with static per-loop buffer
Ondřej Surý [Tue, 4 Jun 2024 06:38:35 +0000 (08:38 +0200)] 
Replace the tcp_buffers memory pool with static per-loop buffer

As a single thread can process only one TCP send at the time, we don't
really need a memory pool for the TCP buffers, but it's enough to have
a single per-loop (client manager) static buffer that's being used to
assemble the DNS message and then it gets copied into own sending
buffer.

In the future, this should get optimized by exposing the uv_try API
from the network manager, and first try to send the message directly
and allocate the sending buffer only if we need to send the data
asynchronously.

2 years agons_client: reuse TCP send buffers
Aram Sargsyan [Tue, 12 Mar 2024 15:29:51 +0000 (15:29 +0000)] 
ns_client: reuse TCP send buffers

Constantly allocating, reallocating and deallocating 64K TCP send
buffers by 'ns_client' instances takes too much CPU time.

There is an existing mechanism to reuse the ns_clent_t structure
associated with the handle using 'isc_nmhandle_getdata/_setdata'
(see ns_client_request()), but it doesn't work with TCP, because
every time ns_client_request() is called it gets a new handle even
for the same TCP connection, see the comments in
streamdns_on_complete_dnsmessage().

To solve the problem, we introduce an array of available (unused)
TCP buffers stored in ns_clientmgr_t structure so that a 'client'
working via TCP can have a chance to reuse one (if there is one)
instead of allocating a new one every time.

2 years agoThrottle reading from TCP if the sends are not getting through
Ondřej Surý [Thu, 18 Jan 2024 16:24:22 +0000 (17:24 +0100)] 
Throttle reading from TCP if the sends are not getting through

When TCP client would not read the DNS message sent to them, the TCP
sends inside named would accumulate and cause degradation of the
service.  Throttle the reading from the TCP socket when we accumulate
enough DNS data to be sent.  Currently this is limited in a way that a
single largest possible DNS message can fit into the buffer.

2 years agoMerge branch '4473-fix-doh-intermittent-crash' into 'v9.20.0-release'
Nicki Křížek [Mon, 10 Jun 2024 14:45:42 +0000 (14:45 +0000)] 
Merge branch '4473-fix-doh-intermittent-crash' into 'v9.20.0-release'

DoH:  Avoid potential data races in our DoH implementation related to to HTTP/2 session object management and endpoints set object management

See merge request isc-private/bind9!614

2 years agoModify release notes [GL #4473]
Artem Boldariev [Wed, 20 Dec 2023 17:58:49 +0000 (19:58 +0200)] 
Modify release notes [GL #4473]

Mention that an intermittent BIND process termination in DoH code has
been fixed.

2 years agoModify CHANGES [GL #4473]
Artem Boldariev [Wed, 20 Dec 2023 17:54:31 +0000 (19:54 +0200)] 
Modify CHANGES [GL #4473]

Mention that an intermittent BIND process termination in DoH code has
been fixed.

2 years agoKeep the endpoints set reference within an HTTP/2 socket
Artem Boldariev [Wed, 13 Mar 2024 16:04:46 +0000 (18:04 +0200)] 
Keep the endpoints set reference within an HTTP/2 socket

This commit ensures that an HTTP endpoints set reference is stored in
a socket object associated with an HTTP/2 stream instead of
referencing the global set stored inside a listener.

This helps to prevent an issue like follows:

1. BIND is configured to serve DoH clients;
2. A client is connected and one or more HTTP/2 stream is
created. Internal pointers are now pointing to the data on the
associated HTTP endpoints set;
3. BIND is reconfigured - the new endpoints set object is created and
promoted to all listeners;
4. The old pointers to the HTTP endpoints set data are now invalid.

Instead referencing a global object that is updated on
re-configurations we now store a local reference which prevents the
endpoints set objects to go out of scope prematurely.

2 years agoDoH: avoid potential use after free for HTTP/2 session objects
Artem Boldariev [Fri, 8 Dec 2023 12:26:46 +0000 (14:26 +0200)] 
DoH: avoid potential use after free for HTTP/2 session objects

It was reported that HTTP/2 session might get closed or even deleted
before all async. processing has been completed.

This commit addresses that: now we are avoiding using the object when
we do not need it or specifically check if the pointers used are not
'NULL' and by ensuring that there is at least one reference to the
session object while we are doing incoming data processing.

This commit makes the code more resilient to such issues in the
future.

2 years agoAdd placeholder entries to CHANGES 181371
Nicki Křížek [Mon, 10 Jun 2024 12:09:12 +0000 (14:09 +0200)] 
Add placeholder entries to CHANGES

Add placeholders for the following issues:

- [GL #4473]
- [GL #4481]
- [GL #497] [GL #3405]
- [GL #3403] [GL #4548]
- [GL #4480]
- [GL #4507]

2 years agoMerge branch 'nicki/add-placeholder-for-4661' into 'main'
Nicki Křížek [Mon, 10 Jun 2024 14:16:46 +0000 (14:16 +0000)] 
Merge branch 'nicki/add-placeholder-for-4661' into 'main'

Add a CHANGES placeholder for [GL #4661]

See merge request isc-projects/bind9!9097

2 years agoAdd a CHANGES placeholder for [GL #4661]
Nicki Křížek [Mon, 10 Jun 2024 12:09:12 +0000 (14:09 +0200)] 
Add a CHANGES placeholder for [GL #4661]

2 years agoMerge branch '4728-allow-transfer-none' into 'main'
Evan Hunt [Wed, 5 Jun 2024 21:50:47 +0000 (21:50 +0000)] 
Merge branch '4728-allow-transfer-none' into 'main'

change allow-transfer default to "none"

Closes #4728

See merge request isc-projects/bind9!9046

2 years agoCHANGES and relnotes for [GL #4728]
Evan Hunt [Thu, 16 May 2024 22:52:27 +0000 (15:52 -0700)] 
CHANGES and relnotes for [GL #4728]

2 years agochange allow-transfer default to "none"
Evan Hunt [Thu, 16 May 2024 22:23:22 +0000 (15:23 -0700)] 
change allow-transfer default to "none"

Changed the default value for 'allow-transfer' to 'none'; zone
transfers now require explicit authorization.

Updated all system tests to specify an allow-transfer ACL when needed.

Revised the ARM to specify that the default is 'none'.

2 years agoMerge branch 'ondrej/use-rcu-stack-for-qpcache-deadnodes' into 'main'
Ondřej Surý [Wed, 5 Jun 2024 17:40:30 +0000 (17:40 +0000)] 
Merge branch 'ondrej/use-rcu-stack-for-qpcache-deadnodes' into 'main'

Use RCU wait-free stack for qpcache deadnodes

See merge request isc-projects/bind9!8907

2 years agoUse isc_queue to implement wait-free deadnodes queue
Ondřej Surý [Mon, 25 Mar 2024 11:17:42 +0000 (12:17 +0100)] 
Use isc_queue to implement wait-free deadnodes queue

Replace the ISC_LIST based deadnodes implementation with isc_queue which
is wait-free and we don't have to acquire neither the tree nor node lock
to append nodes to the queue and the cleaning process can also
copy (splice) the list into a local copy without acquiring the list.

Currently, there's little benefit to this as we need to hold those
locks anyway, but in the future as we move to RCU based implementation,
this will be ready.

To align the cleaning with our event loop based model, remove the
hardcoded count for the node locks and use the number of the event loops
instead.  This way, each event loop can have its own cleaning as part of
the process.  Use uniform random numbers to spread the nodes evenly
between the buckets (instead of hashing the domain name).

2 years agoAdd isc_queue implementation on top of cds_wfcq
Ondřej Surý [Mon, 25 Mar 2024 11:17:42 +0000 (12:17 +0100)] 
Add isc_queue implementation on top of cds_wfcq

Add an isc_queue implementation that hides the gory details of cds_wfcq
into more neat API.  The same caveats as with cds_wfcq.

TODO: Add documentation to the API.

2 years agoMerge branch '4736-isc_r_hostdown-was-not-being-handled-by-resolver-c' into 'main'
Mark Andrews [Tue, 4 Jun 2024 07:35:36 +0000 (07:35 +0000)] 
Merge branch '4736-isc_r_hostdown-was-not-being-handled-by-resolver-c' into 'main'

Resolve "ISC_R_HOSTDOWN was not being handled by resolver.c"

Closes #4736

See merge request isc-projects/bind9!9055

2 years agoAdd CHANGES note for [GL #4736]
Mark Andrews [Tue, 21 May 2024 01:52:38 +0000 (11:52 +1000)] 
Add CHANGES note for [GL #4736]

2 years agoUpdate resquery_senddone handling of ISC_R_TIMEDOUT
Mark Andrews [Mon, 27 May 2024 05:17:06 +0000 (15:17 +1000)] 
Update resquery_senddone handling of ISC_R_TIMEDOUT

Treat timed out as an address specific error.

2 years agoUpdate resquery_senddone handling of ISC_R_CONNECTIONRESET
Mark Andrews [Mon, 27 May 2024 02:46:46 +0000 (12:46 +1000)] 
Update resquery_senddone handling of ISC_R_CONNECTIONRESET

Treat connection reset as an address specific error.

2 years agoHandle ISC_R_HOSTDOWN and ISC_R_NETDOWN in resolver.c
Mark Andrews [Tue, 21 May 2024 01:48:25 +0000 (11:48 +1000)] 
Handle ISC_R_HOSTDOWN and ISC_R_NETDOWN in resolver.c

These error codes should be treated like other unreachable error
codes.

2 years agoMerge branch '4706-4707-add-more-label-checks-to-dangerfile.py' into 'main'
Michał Kępień [Mon, 3 Jun 2024 11:10:55 +0000 (11:10 +0000)] 
Merge branch '4706-4707-add-more-label-checks-to-dangerfile.py' into 'main'

Add more label checks to dangerfile.py

Closes #4706 and #4707

See merge request isc-projects/bind9!9040

2 years agoFail for merge requests with "Affects v9.x" labels
Michał Kępień [Mon, 3 Jun 2024 11:07:21 +0000 (13:07 +0200)] 
Fail for merge requests with "Affects v9.x" labels

Setting "Affects v9.x" labels on a merge request duplicates information
already present on the GitLab issue associated with that merge request.
For trivial merge requests that are not associated with any GitLab
issue, setting the "Affects v9.x" label(s) is considered unnecessary.
Trigger a failure for every merge request marked with at least one
"Affects v9.x" label.

2 years agoWarn about auto-generated merge request titles
Michał Kępień [Mon, 3 Jun 2024 11:07:21 +0000 (13:07 +0200)] 
Warn about auto-generated merge request titles

Merge request titles auto-generated by GitLab are often a source of
confusion regarding the actual contents of a given merge request.  Warn
for merge requests containing titles that look like auto-generated ones.

2 years agoFail for branches using old-style version suffixes
Michał Kępień [Mon, 3 Jun 2024 11:07:21 +0000 (13:07 +0200)] 
Fail for branches using old-style version suffixes

Using "-v9_x" and "-v9.x" version suffixes for branch names is now
deprecated since some automation logic does not handle these.  Fail for
any merge request using such old-style version suffixes.

2 years agoFail for backports with "Affects v9.x" labels set
Michał Kępień [Mon, 3 Jun 2024 11:07:21 +0000 (13:07 +0200)] 
Fail for backports with "Affects v9.x" labels set

Backports are not expected to have any "Affects v9.x" labels set since
those are only meant to be set for merge requests that should have
backports created for them.

2 years agoMerge branch '3472-ipv4-only-mode-not-respected-for-zone-transfers' into 'main'
Mark Andrews [Mon, 3 Jun 2024 09:59:44 +0000 (09:59 +0000)] 
Merge branch '3472-ipv4-only-mode-not-respected-for-zone-transfers' into 'main'

Resolve "IPv4-only mode not respected for zone transfers"

Closes #3472

See merge request isc-projects/bind9!8522

2 years agoAdd CHANGES note for [GL #6288]
Mark Andrews [Wed, 29 Nov 2023 01:51:15 +0000 (12:51 +1100)] 
Add CHANGES note for [GL #6288]

2 years agoDon't do DS checks over disabled address families
Mark Andrews [Thu, 30 Nov 2023 05:46:50 +0000 (16:46 +1100)] 
Don't do DS checks over disabled address families

2 years agoDon't forward UPDATE messages over disabled address families
Mark Andrews [Thu, 30 Nov 2023 05:31:33 +0000 (16:31 +1100)] 
Don't forward UPDATE messages over disabled address families

2 years agoDon't send NOTIFY over disabled address families
Mark Andrews [Thu, 30 Nov 2023 00:18:41 +0000 (11:18 +1100)] 
Don't send NOTIFY over disabled address families

2 years agoCheck that no primaries is logged with -4 or -6
Mark Andrews [Wed, 29 Nov 2023 03:29:05 +0000 (14:29 +1100)] 
Check that no primaries is logged with -4 or -6

When in -4 mode check that "IPv6 disabled and no IPv4 primaries"
is logged and when in -6 mode check that "IPv4 disabled and no IPv6
primaries" is logged.

2 years agoReport non-effective primaries
Mark Andrews [Wed, 29 Nov 2023 01:35:20 +0000 (12:35 +1100)] 
Report non-effective primaries

When named is started with -4 or -6 and the primaries for a zone
do not have an IPv4 or IPv6 address respectively issue a log message.

2 years agoZone transfers should honour -4 and -6 options
Mark Andrews [Tue, 28 Nov 2023 06:26:41 +0000 (17:26 +1100)] 
Zone transfers should honour -4 and -6 options

Check if the address family has been disabled when transferring
zones.

2 years agoAdd helper function isc_sockaddr_disabled
Mark Andrews [Tue, 13 Feb 2024 00:42:44 +0000 (11:42 +1100)] 
Add helper function isc_sockaddr_disabled