]> git.ipfire.org Git - thirdparty/bind9.git/log
thirdparty/bind9.git
22 months agonew: dev: generate changelog from git log
Nicki Křížek [Mon, 29 Jul 2024 12:15:49 +0000 (12:15 +0000)] 
new: dev: generate changelog from git log

Use a single source of truth, the git log, to generate the list of CHANGES. Use the .rst format and include it in the ARM for a quick reference with proper gitlab links to issues and merge requests.

Closes #75

Merge branch 'nicki/add-gitchangelog' into 'main'

Closes #75

See merge request isc-projects/bind9!9152

22 months agoUpdate docs and processes to use the new changelog
Nicki Křížek [Wed, 24 Jul 2024 15:53:43 +0000 (17:53 +0200)] 
Update docs and processes to use the new changelog

22 months agoUpdate dangerfile for new changelog workflow
Nicki Křížek [Wed, 17 Jul 2024 12:15:47 +0000 (14:15 +0200)] 
Update dangerfile for new changelog workflow

22 months agoSkip pylint checks for contrib directory
Nicki Křížek [Mon, 22 Jul 2024 14:29:53 +0000 (16:29 +0200)] 
Skip pylint checks for contrib directory

The files in contrib/ directory shouldn't be subject to our pylint
check. They can come from external sources and we don't subject these to
the same standards as the rest of the BIND9 code / scripts.

22 months agoRemove changes job and related scripts
Nicki Křížek [Mon, 22 Jul 2024 14:28:10 +0000 (16:28 +0200)] 
Remove changes job and related scripts

These are no longer needed, since changelog is generated using
gitchangelog.

22 months agoAdd BIND9 configuration for gitchangelog
Nicki Křížek [Mon, 22 Jul 2024 12:52:13 +0000 (14:52 +0200)] 
Add BIND9 configuration for gitchangelog

The configuration has been crafted to cater for BIND9 needs:
- Define actions that have an equivalent section in existing Release
  Notes
- Assume the commits that have the necessary changelog makrup are merge
  commits from GitLab and transform them into messages and proper links
- Put the resulting changelog into the proper place in
  doc/arm/changelog.rst
- Have a separate configuration for changelog and release notes. Both of
  these should be generated from the `git log`, with release notes being
  subject to more scrutiny and further editing

22 months agoAdd new changelog file
Nicki Křížek [Mon, 22 Jul 2024 13:08:58 +0000 (15:08 +0200)] 
Add new changelog file

Create new changelog and include it in the documentation. Include the
previous CHANGES as plain text without any markup.

22 months agoAddress gitchangelog deprecation warning
Nicki Křížek [Mon, 22 Jul 2024 13:17:45 +0000 (15:17 +0200)] 
Address gitchangelog deprecation warning

22 months agoAdjust gitchangelog whitespace
Nicki Křížek [Wed, 17 Jul 2024 12:58:01 +0000 (14:58 +0200)] 
Adjust gitchangelog whitespace

Format the output to produce a nicer looking rst output, similar to the
former CHANGES file.

22 months agoAllow gitchangelog to include commit sha
Nicki Křížek [Mon, 22 Jul 2024 12:28:28 +0000 (14:28 +0200)] 
Allow gitchangelog to include commit sha

Add an option which can be used to put short commit sha at the end of
each commit subject line in the generated changelog.

22 months agoRemove authors from gitchangelog output
Nicki Křížek [Mon, 15 Jul 2024 13:59:19 +0000 (15:59 +0200)] 
Remove authors from gitchangelog output

Given our workflow, this could easily lead to misattribution. It's also
not an actionable information and it can be found in the MR / git log
instead.

22 months agoReformat gitchangelog with black
Nicki Křížek [Mon, 15 Jul 2024 13:51:30 +0000 (15:51 +0200)] 
Reformat gitchangelog with black

22 months agoImport gitchanglog 3.0.4
Nicki Křížek [Mon, 22 Jul 2024 12:41:00 +0000 (14:41 +0200)] 
Import gitchanglog 3.0.4

The  project hasn't seen any new development/changes since 2018 and it
seems unlikely we'd be able to get any changes into the upstream. Since
it's isolated into a single file and its task is fairly straighforward,
pull the code into our own repository and maintain it here as needed.

This also makes it easier to make any changes that are specific to our
project.

22 months agoSet up version and release notes for BIND 9.21.0
Nicki Křížek [Tue, 23 Jul 2024 16:33:22 +0000 (16:33 +0000)] 
Set up version and release notes for BIND 9.21.0

Merge branch 'nicki/set-up-version-and-release-notes-for-bind-9.21.0' into 'main'

See merge request isc-projects/bind9!9166

22 months agoSet up release notes for BIND 9.21.0
Nicki Křížek [Tue, 23 Jul 2024 15:31:46 +0000 (17:31 +0200)] 
Set up release notes for BIND 9.21.0

22 months agoUpdate BIND version to 9.21.0-dev
Nicki Křížek [Tue, 23 Jul 2024 15:31:46 +0000 (17:31 +0200)] 
Update BIND version to 9.21.0-dev

22 months agoMerge tag 'v9.20.0'
Nicki Křížek [Tue, 23 Jul 2024 15:15:41 +0000 (17:15 +0200)] 
Merge tag 'v9.20.0'

23 months agoUpdate BIND version to 9.20.0 v9.20.0
Nicki Křížek [Mon, 8 Jul 2024 13:01:00 +0000 (15:01 +0200)] 
Update BIND version to 9.20.0

23 months agoAdd a CHANGES marker
Nicki Křížek [Mon, 8 Jul 2024 12:58:59 +0000 (14:58 +0200)] 
Add a CHANGES marker

23 months agoMerge branch 'nicki/prepare-documentation-for-bind-9.20.0' into 'v9.20.0-release'
Nicki Křížek [Mon, 8 Jul 2024 12:55:47 +0000 (12:55 +0000)] 
Merge branch 'nicki/prepare-documentation-for-bind-9.20.0' into 'v9.20.0-release'

Prepare documentation for BIND 9.20.0

See merge request isc-private/bind9!710

23 months agoUpdate documentation for 9.20.0
Nicki Křížek [Mon, 8 Jul 2024 11:51:31 +0000 (13:51 +0200)] 
Update documentation for 9.20.0

23 months agoCreate release notes for 9.20.0
Nicki Křížek [Mon, 8 Jul 2024 11:31:31 +0000 (13:31 +0200)] 
Create release notes for 9.20.0

23 months agoExtend max-types-per-name documentation
Nicki Křížek [Mon, 8 Jul 2024 10:37:35 +0000 (12:37 +0200)] 
Extend max-types-per-name documentation

23 months agoDocument new -J option for dnssec-signzone and dnssec-verify
Nicki Křížek [Thu, 27 Jun 2024 11:31:55 +0000 (13:31 +0200)] 
Document new -J option for dnssec-signzone and dnssec-verify

23 months agoReorder release notes
Nicki Křížek [Wed, 12 Jun 2024 14:32:27 +0000 (16:32 +0200)] 
Reorder release notes

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

23 months 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.

23 months 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

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]

23 months 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

23 months 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

23 months 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]

23 months 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]

23 months 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.

23 months 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

23 months 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.

23 months 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.

23 months 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.

23 months 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.

23 months 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]

23 months 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]

23 months 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.

23 months 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

23 months 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.

23 months 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.

23 months 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.

23 months 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.

23 months 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.

23 months 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.

23 months 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

23 months 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]

23 months 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.

23 months 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.

23 months 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.

23 months 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.

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

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

23 months 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.

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

23 months 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

23 months 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

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

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

23 months 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.

23 months 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.

23 months 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.

23 months 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.

23 months 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.

23 months 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.

23 months 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

23 months 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]

23 months 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.

23 months 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).

23 months 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.

23 months 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.

23 months 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.

23 months 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

23 months 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.

23 months 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.

23 months 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.

23 months 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.

23 months 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]

23 months 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

23 months 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]