]> git.ipfire.org Git - thirdparty/bind9.git/log
thirdparty/bind9.git
22 months agoProperly compute the physical memory size
Mark Andrews [Tue, 9 Jul 2024 02:37:13 +0000 (12:37 +1000)] 
Properly compute the physical memory size

On a 32 bit machine casting to size_t can still lead to an overflow.
Cast to uint64_t.  Also detect all possible negative values for
pages and pagesize to silence warning about possible negative value.

    39#if defined(_SC_PHYS_PAGES) && defined(_SC_PAGESIZE)
     1. tainted_data_return: Called function sysconf(_SC_PHYS_PAGES),
           and a possible return value may be less than zero.
     2. assign: Assigning: pages = sysconf(_SC_PHYS_PAGES).
    40        long pages = sysconf(_SC_PHYS_PAGES);
    41        long pagesize = sysconf(_SC_PAGESIZE);
    42
     3. Condition pages == -1, taking false branch.
     4. Condition pagesize == -1, taking false branch.
    43        if (pages == -1 || pagesize == -1) {
    44                return (0);
    45        }
    46
     5. overflow: The expression (size_t)pages * pagesize might be negative,
           but is used in a context that treats it as unsigned.

    CID 498034: (#1 of 1): Overflowed return value (INTEGER_OVERFLOW)
    6. return_overflow: (size_t)pages * pagesize, which might have underflowed,
       is returned from the function.
    47        return ((size_t)pages * pagesize);
    48#endif /* if defined(_SC_PHYS_PAGES) && defined(_SC_PAGESIZE) */

22 months agochg: dev: Fix data race in clean_finds_at_name
Mark Andrews [Wed, 31 Jul 2024 05:34:48 +0000 (05:34 +0000)] 
chg: dev: Fix data race in clean_finds_at_name

Stop updating `find.result_v4` and `find.result_v4` in `clean_finds_at_name`. The values are supposed to be static.

Closes #4118

Merge branch '4118-data-race-lib-dns-adb-c-1537-in-clean_finds_at_name' into 'main'

Closes #4118

See merge request isc-projects/bind9!9108

22 months agoDo not update find.result_v4 and find.result_v6
Mark Andrews [Tue, 18 Jun 2024 06:22:31 +0000 (16:22 +1000)] 
Do not update find.result_v4 and find.result_v6

These values are supposed to be static for the life of the find and
clean_finds_at_name was updating them resulting in TSAN error
reports.

    WARNING: ThreadSanitizer: data race
    Write of size 4 at 0x000000000001 by thread T1 (mutexes: write M1, write M2):
      #0 clean_finds_at_name lib/dns/adb.c:1537
      #1 fetch_callback lib/dns/adb.c:4009
      #2 task_run lib/isc/task.c:815
      #3 isc_task_run lib/isc/task.c:896
      #4 isc__nm_async_task netmgr/netmgr.c:848
      #5 process_netievent netmgr/netmgr.c:920
      #6 process_queue netmgr/netmgr.c:1013
      #7 process_all_queues netmgr/netmgr.c:767
      #8 async_cb netmgr/netmgr.c:796
      #9 uv__async_io /usr/src/libuv-v1.44.1/src/unix/async.c:163
      #10 isc__trampoline_run lib/isc/trampoline.c:189

    Previous read of size 4 at 0x000000000001 by thread T2:
      #0 findname lib/dns/resolver.c:3749
      #1 fctx_getaddresses lib/dns/resolver.c:3993
      #2 fctx_try lib/dns/resolver.c:4390
      #3 rctx_nextserver lib/dns/resolver.c:10356
      #4 rctx_done lib/dns/resolver.c:10503
      #5 resquery_response lib/dns/resolver.c:8511
      #6 udp_recv lib/dns/dispatch.c:638
      #7 isc__nm_async_readcb netmgr/netmgr.c:2885
      #8 isc__nm_readcb netmgr/netmgr.c:2858
      #9 udp_recv_cb netmgr/udp.c:650
      #10 isc__nm_udp_read_cb netmgr/udp.c:1057
      #11 uv__udp_recvmsg /usr/src/libuv-v1.44.1/src/unix/udp.c:303
      #12 isc__trampoline_run lib/isc/trampoline.c:189

22 months agofix: test: Prevent intermittent setup.sh failures in the "statschannel" system test
Mark Andrews [Wed, 31 Jul 2024 04:42:43 +0000 (04:42 +0000)] 
fix: test: Prevent intermittent setup.sh failures in the "statschannel" system test

Don't verify the just signed zone as the RRSIGs could have expired before the signing process completes

Closes #4781 #2476

Merge branch '4781-statschannel-setup-can-fail-due-to-short-validity-interval' into 'main'

Closes #4781 and #2476

See merge request isc-projects/bind9!9114

22 months agoDisable post zone verification for manykeys
Mark Andrews [Wed, 19 Jun 2024 02:45:09 +0000 (12:45 +1000)] 
Disable post zone verification for manykeys

As the expiration time is now+1 the RRSIG records may expire before
the verification step happens.

22 months agochg: test: fix intermittent test failure dnssec system test
Matthijs Mekking [Tue, 30 Jul 2024 12:01:37 +0000 (12:01 +0000)] 
chg: test: fix intermittent test failure dnssec system test

Closes #4768

Merge branch '4768-dnssec-test-is-broken' into 'main'

Closes #4768

See merge request isc-projects/bind9!9101

22 months agoFix intermittent test failure dnssec system test
Matthijs Mekking [Tue, 11 Jun 2024 11:08:30 +0000 (13:08 +0200)] 
Fix intermittent test failure dnssec system test

The updatecheck-kskonly.secure zone is being used to test dynamic
updates while the KSK is offline. It ensures that the DNSKEY RRset
will retain the RRSIG record, while the updated data is being signed
with the currently active ZSK.

When walking through ZSK rollovers, ensure that the newest ZSK (ZSK3)
is published before doing the dynamic update, preventing timing
related test failures.

Also fix the test log line ($ZSK_ID3 was not yet created at the time
of logging).

22 months agofix: usr: Update key lifetime and metadata after dnssec-policy reconfig
Matthijs Mekking [Tue, 30 Jul 2024 10:13:01 +0000 (10:13 +0000)] 
fix: usr: Update key lifetime and metadata after dnssec-policy reconfig

Adjust key state and timing metadata if dnssec-policy key lifetime configuration is updated, so that it also
affects existing keys.

Closes #4677

Merge branch '4677-dnssec-policy-key-lifetime-reconfigure' into 'main'

Closes #4677

See merge request isc-projects/bind9!9118

22 months agoLog key calculation overflows
Mark Andrews [Wed, 26 Jun 2024 04:49:51 +0000 (14:49 +1000)] 
Log key calculation overflows

22 months agoCheck for overflow when adding lifetime
Mark Andrews [Wed, 26 Jun 2024 04:39:04 +0000 (14:39 +1000)] 
Check for overflow when adding lifetime

22 months agoNo longer update key lifetime if key is retired
Matthijs Mekking [Mon, 24 Jun 2024 13:18:40 +0000 (15:18 +0200)] 
No longer update key lifetime if key is retired

The key lifetime should no longer be adjusted if the key is being
retired earlier, for example because a manual rollover was started.

This would falsely be seen as a dnssec-policy lifetime reconfiguration,
and would adjust the retire/removed time again.

This also means we should update the status output, and the next
rollover scheduled is now calculated using (retire-active) instead of
key lifetime.

22 months agoUpdate key lifetime and metadata after reconfig
Matthijs Mekking [Mon, 24 Jun 2024 13:14:16 +0000 (15:14 +0200)] 
Update key lifetime and metadata after reconfig

If dnssec-policy is reconfigured and the key lifetime has changed,
update existing keys with the new lifetime and adjust the retire
and removed timing metadata accordingly.

If the key has no lifetime yet, just initialize the lifetime. It
may be that the retire/removed timing metadata has already been set.

Skip keys which goal is not set to omnipresent. These keys are already
in the progress of retiring, or still unused.

22 months agoTest updating dnssec-policy key lifetime
Matthijs Mekking [Mon, 24 Jun 2024 09:18:40 +0000 (11:18 +0200)] 
Test updating dnssec-policy key lifetime

Check if the key lifetime is updated in the key files. Make sure the
inactive and removed timing metadata are adjusted accordingly.

22 months agoMove dnssec-policy to kasp-fips.conf.in
Matthijs Mekking [Mon, 24 Jun 2024 08:01:37 +0000 (10:01 +0200)] 
Move dnssec-policy to kasp-fips.conf.in

All dnssec-policy configurations are here, so why not this one?

22 months agofix: doc: Fix type in key-store reference rst
Matthijs Mekking [Tue, 30 Jul 2024 08:36:17 +0000 (08:36 +0000)] 
fix: doc: Fix type in key-store reference rst

Closes #4813

Merge branch '4813-fix-typo-in-reference-rst' into 'main'

Closes #4813

See merge request isc-projects/bind9!9176

22 months agoFix backslashes on key-store block
Suzanne Goldlust [Wed, 24 Jul 2024 16:59:50 +0000 (16:59 +0000)] 
Fix backslashes on key-store block

22 months agochg: test: Retry job in case of AWS Spot Instance interruption event
Nicki Křížek [Mon, 29 Jul 2024 13:25:46 +0000 (13:25 +0000)] 
chg: test: Retry job in case of AWS Spot Instance interruption event

Closes #4777

Merge branch '4777-retry-job-aws-spot-instance-interruption-event' into 'main'

Closes #4777

See merge request isc-projects/bind9!9107

22 months agoRetry job in case of AWS Spot Instance interruption
Emanuel Petr [Mon, 17 Jun 2024 18:06:13 +0000 (20:06 +0200)] 
Retry job in case of AWS Spot Instance interruption

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.

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

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

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

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

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

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

23 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

23 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

23 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

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

2 years 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.