Commit Graph

38153 Commits

Author SHA1 Message Date
Tom Krizek
74def754f9 Use prereq.sh for digdelv, dnssec, forward system tests
(cherry picked from commit 00b92bd064)
2023-09-20 10:32:11 +02:00
Tom Krizek
53a09edc4f Use prereq.sh for qmin, cookie system tests
(cherry picked from commit 78981cee77)
2023-09-20 10:32:11 +02:00
Tom Krizek
39770409a9 Use prereq.sh for reclimit system test
(cherry picked from commit 2f962f7041)
2023-09-20 10:32:11 +02:00
Tom Krizek
697041ae93 Use prereq.sh for xfer system test
(cherry picked from commit 587129b4c0)
2023-09-20 10:32:11 +02:00
Tom Krizek
cefa09ada5 Use prereq.sh for statschannel system test
(cherry picked from commit 27281955af)
2023-09-20 10:32:11 +02:00
Tom Krizek
c0e4411961 Add prereq.sh scripts for system tests requiring perl mod DNS
prereq.sh mechanism for dependency detection is preferred since it works
for both legacy and pytest runner.

(cherry picked from commit 9cc821d42f)
2023-09-20 10:32:10 +02:00
Tom Krizek
ee849d2a0c Use proper perl interpreter in xfer system test
(cherry picked from commit f0493890cc)
2023-09-20 10:32:10 +02:00
Tom Krizek
76b5c07b8d Remove redundant dependency checks for system tests
Dependencies for these tests are already checked in prereq.sh - if the
dependencies are missing, these tests will be skipped. The extra
dependency check in Makefile.am is extraneous and only applied for the
legacy test runner.

(cherry picked from commit 807f67b1cd)
2023-09-20 10:32:10 +02:00
Tom Krizek
9d9f2dcda5 Fix pytest module detection for run.sh
To allow concurrent invocations of pytest, it is necessary to assign
ports properly to avoid conflicts. In order to do that, pytest needs to
know a complete list of all test modules.

When pytest is invoked from run.sh, the current working directory is the
system test directory. To properly detect other tests, the conftest.py
has to look in the bin/tests/system directory, rather than the current
working directory.

(cherry picked from commit d4502206a1)
2023-09-20 10:32:10 +02:00
Tom Krizek
b86a41780a Use pytest runner for make check
Make python & pytest required dependencies to run system tests and
invoke the pytest runner from the makefile.

(cherry picked from commit 56c1087304)
2023-09-20 10:32:05 +02:00
Tom Krizek
7509613408 Merge branch 'tkrizek/pytest-check-system-test-files-with-danger-9.18' into 'bind-9.18'
[9.18] enforce system test file and name conventions with danger CI

See merge request isc-projects/bind9!8311
2023-09-19 13:40:50 +00:00
Tom Krizek
b3a1288ed6 danger: check system test convetions for pytest runner
When adding a new system test, it might easy to forget to add the
required files for the pytest runner or break a naming convention. Add
danger checks to cover these cases.

(cherry picked from commit d1371267c6)
2023-09-19 14:59:39 +02:00
Tom Krizek
56e842bbf2 Rename allow-query pytest glue file
To conform with the expected naming convention, the pytest glue file for
the `allow-query` test should use underscore as the word separator in
the python file name: allow-query/tests_sh_allow_query.py

(cherry picked from commit c026a00696)
2023-09-19 14:56:21 +02:00
Tom Krizek
09a8dd2f5b Treat bin/tests/system/_common as non-temp directory
The _common directory is a special case directory which contains shared
files for other system test directories. Make sure it's tracked in git
and not deleted during temporary directory cleanup.

(cherry picked from commit 9e13c3dbcb)
2023-09-19 14:56:21 +02:00
Tom Krizek
f9e075175d Rename system test directory with common files to _common
The old name "common" clashes with the convention of system test
directory naming. It appears as a system test directory, but it only
contains helper files.

To reduce confusion and to allow automatic detection of issues with
possibly missing test files, rename the helper directory to "_common".
The leading underscore indicates the directory is different and the its
name can no longer be confused with regular system test directories.

(cherry picked from commit 168dba163c)
2023-09-19 14:56:12 +02:00
Mark Andrews
a5639e05b4 Merge branch '4314-dns_ncache_current-fails-to-set-covered-correctly-bind-9.18' into 'bind-9.18'
[9.18] Resolve "dns_ncache_current fails to set covered correctly"

See merge request isc-projects/bind9!8307
2023-09-18 06:40:27 +00:00
Mark Andrews
55baa49118 Add a CHANGES note for [GL #4314]
(cherry picked from commit 80298ade33)
2023-09-18 15:52:16 +10:00
Mark Andrews
88f696de93 Check RRSIG covered type in negative cache entry
The covered type previously displayed as TYPE0 when it should
have reflected the records that was actually covered.

(cherry picked from commit 8ce359652a)
2023-09-18 15:51:44 +10:00
Mark Andrews
933d03fc83 Correctly set the value of covered in dns_ncache_current
Fix the type and rdclass being passed to dns_rdata_tostruct so
that rrsig.covered is correctly set.

(cherry picked from commit 779980710c)
2023-09-18 15:51:44 +10:00
Arаm Sаrgsyаn
4e7f22a228 Merge branch 'aram/danger-ignore-length-warn-for-fixups-9.18' into 'bind-9.18'
[9.18] Don't warn about subject line length for the fixup commits (CI)

See merge request isc-projects/bind9!8302
2023-09-14 12:13:10 +00:00
Aram Sargsyan
43409d27e4 Don't warn about subject line length for the fixup commits
The fixup commits' subject line has a prefix which has its own
length, so warning about the exceeding length is not accurate.
Given that the fixup commits can not be merged, because they
cause a danger failure, it's safe to ignore the length check
for them.

(cherry picked from commit 3db2beef9f)
2023-09-14 11:24:00 +00:00
Arаm Sаrgsyаn
0c0f694a86 Merge branch '4299-cid-465168-null-pointer-dereference' into 'bind-9.18'
Resolve "CID 465168: Null pointer dereference in lib/ns/client.c"

See merge request isc-projects/bind9!8281
2023-09-14 11:22:58 +00:00
Aram Sargsyan
2a57c12922 Remove an unnecessary NULL-check
In the ns__client_put_cb() callback function the 'client->manager'
pointer is guaranteed to be non-NULL, because in ns__client_request(),
before setting up the callback, the ns__client_setup() function is
called for the 'client', which makes sure that 'client->manager' is set.

Removing the NULL-check resolves the following static analyzer warning:

    /lib/ns/client.c: 1675 in ns__client_put_cb()
    1669     		dns_message_puttemprdataset(client->message, &client->opt);
    1670     	}
    1671     	client_extendederror_reset(client);
    1672
    1673     	dns_message_detach(&client->message);
    1674
    >>>     CID 465168:  Null pointer dereferences  (REVERSE_INULL)
    >>>     Null-checking "client->manager" suggests that it may be null, but it has already been dereferenced on all paths leading to the check.
    1675     	if (client->manager != NULL) {
    1676     		ns_clientmgr_detach(&client->manager);
    1677     	}
    1678
    1679     	/*
    1680     	 * Detaching the task must be done after unlinking from
2023-09-14 10:39:24 +00:00
Tom Krizek
e25643f019 Merge branch 'tkrizek/ci-test-binaries-compilation-9.18' into 'bind-9.18'
[9.18] ci: omit explicit command to compile test binaries

See merge request isc-projects/bind9!8295
2023-09-12 08:55:42 +00:00
Tom Krizek
cdbe94ce46 ci: omit explicit command to compile test binaries
The command to compile test binaries is no longer needed, as these are
now compiled as part of the default make target.

Related !8189

(cherry picked from commit 26f20b81ec)
2023-09-12 10:25:03 +02:00
Michal Nowak
3fc050f097 Merge branch 'mnowak/set-up-version-and-release-notes-for-bind-9.18.20' into 'bind-9.18'
Set up version and release notes for BIND 9.18.20

See merge request isc-projects/bind9!8293
2023-09-12 07:38:12 +00:00
Michal Nowak
8b5e396f45 Set up release notes for BIND 9.18.20 2023-09-12 09:36:39 +02:00
Michal Nowak
a0d8c44bf7 Update BIND version to 9.18.20-dev 2023-09-12 09:36:39 +02:00
Ondřej Surý
04128e764e Merge branch '4292-uncleared-libcrypto-error-crypto-evp-evp_fetch-c-373-inner_evp_generic_fetch-bind-9.18' into 'bind-9.18'
[9.18] Resolve "Uncleared libcrypto error: crypto/evp/evp_fetch.c:373 inner_evp_generic_fetch"

See merge request isc-projects/bind9!8279
2023-09-06 15:47:08 +00:00
Mark Andrews
7f89f2d6bc Call ERR_clear_error on EVP_MD_fetch or EVP_##alg error
(cherry picked from commit 28adcf1831)
2023-09-06 15:47:05 +00:00
Mark Andrews
ad9fd9e362 Merge branch '4290-raise-log-level-to-isc_log_error-on-formerr-in-xfrin-c-bind-9.18' into 'bind-9.18'
[9.18] Resolve "raise log level to ISC_LOG_NOTICE on FORMERR in xfrin.c"

See merge request isc-projects/bind9!8280
2023-09-06 11:29:12 +00:00
Mark Andrews
dd9f205c13 Add a CHANGES note for [GL #4290]
(cherry picked from commit b867244305)
2023-09-06 20:15:17 +10:00
Mark Andrews
0325e4a1fb Adjust level of log messages when transferring in a zone
This raises the log level of messages treated as FORMERR to NOTICE
when transfering in a zone.  This also adds a missing log message
for TYPE0 and meta types received during a zone transfer.

(cherry picked from commit 6c3414739d)
2023-09-06 20:14:41 +10:00
Michal Nowak
95950a2160 Merge branch 'mnowak/statschannel-system-test-is-too-verbose-9.18' into 'bind-9.18'
[9.18] Disable command tracing in statschannel system test

See merge request isc-projects/bind9!8278
2023-09-05 17:23:48 +00:00
Michal Nowak
71441b782b Disable command tracing in statschannel system test
Command tracing was added recently via
525afc666a and makes the system test too
verbose.

(cherry picked from commit f0c37d861c)
2023-09-05 19:20:37 +02:00
Michal Nowak
1f55cbf2d1 Merge branch '4255-suspicious-messsage-id-fix' into 'bind-9.18'
TLS DNS: take into account partial writes by SSL_write_ex()

See merge request isc-projects/bind9!8276
2023-09-05 16:45:42 +00:00
Artem Boldariev
35bd74a5f0 Add CHANGES and release note for [GL #4255]
Mention that possibility of partial TLS writes was taken into account
and that fixes DNS messages corruption over long DNS over TLS streams.
2023-09-05 18:05:59 +02:00
Artem Boldariev
84d71c8e2c TLS DNS: take into account partial writes by SSL_write_ex()
This commit changes TLS DNS so that partial writes by the
SSL_write_ex() function are taken into account properly. Now, before
doing encryption, we are flushing the buffers for outgoing encrypted
data.

The problem is fairly complicated and originates from the fact that it
is somewhat hard to understand by reading the documentation if and
when partial writes are supported/enabled or not, and one can get a
false impression that they are not supported or enabled by
default (https://www.openssl.org/docs/man3.1/man3/SSL_write_ex.html). I
have added a lengthy comment about that into the code because it will
be more useful there. The documentation on this topic is vague and
hard to follow.

The main point is that when SSL_write_ex() fails with
SSL_ERROR_WANT_WRITE, the OpenSSL code tells us that we need to flush
the outgoing buffers and then call SSL_write_ex() again with exactly
the same arguments in order to continue as partial write could have
happened on the previous call to SSL_write_ex() (that is not hard to
verify by calling BIO_pending(sock->tls.app_rbio) before and after the
call to SSL_write_ex() and comparing the returned values). This aspect
was not taken into account in the code.

Now, one can wonder how that could have led to the behaviour that we
saw in the #4255 bug report. In particular, how could we lose one
message and duplicate one twice? That is where things get interesting.

One needs to keep two things in mind (that is important):

Firstly, the possibility that two (or more) subsequent SSL_write_ex()
calls will be done with exactly the same arguments is very high (the
code does not guarantee that in any way, but in practice, that happens
a lot).

Secondly, the dnsperf (the software that helped us to trigger the bug)
bombed the test server with messages that contained exactly the same
data. The only difference in the responses is message IDs, which can
be found closer to the start of a message.

So, that is what was going on in the older version of the code:

1. During one of the isc_nm_send() calls, the SSL_write_ex() call
fails with SSL_ERROR_WANT_WRITE. Partial writing has happened, though,
and we wrote a part of the message with the message
ID (e.g. 2014). Nevertheless, we have rescheduled the complete send
operation asynchronously by a call to tlsdns_send_enqueue().

2. While the asynchronous request has not been completed, we try to
send the message (e.g. with ID 2015). The next isc_nm_send() or
re-queued send happens with a call to SSL_write_ex() with EXACTLY the
same arguments as in the case of the previous call. That is, we are
acting as if we want to complete the previously failed SSL_write_ex()
attempt (according to the OpenSSL documentation:
https://www.openssl.org/docs/man3.1/man3/SSL_write_ex.html, the
"Warnings" section). This way, we already have a start of the message
containing the previous ID (2014 in our case) but complete the write
request with the rest of the data given in the current write
attempt. However, as responses differ only in message ID, we end up
sending a valid (properly structured) DNS message but with the ID of
the previous one. This way, we send a message with ID from the
previous isc_nm_send() attempt. The message with the ID from the send
request from this attempt will never be sent, as the code thinks that
it is sending it now (that is how we send the message with ID 2014
instead of 2015, as in our example, thus making the message with ID
2015 never to be sent).

3. At some point later, the asynchronous send request (the rescheduled
on the first step) completes without an error, sending a second
message with the same ID (2014).

It took exhausting SSL write buffers (so that a data encryption
attempt cannot be completed in one operation) via long DoT streams in
order to exhibit the behaviour described above. The exhaustion
happened because we have not been trying to flush the buffers often
enough (especially in the case of multiple subsequent writes).

In my opinion, the origin of the problem can be described as follows:

It happened due to making wrong guesses caused by poorly written
documentation.
2023-09-05 18:03:44 +02:00
Ondřej Surý
7df60d3085 Merge branch '4038-specialised-arena-per-worker-9.18' into 'bind-9.18'
[9.18] Make it possible to create memory contexts backed by jemalloc arenas

See merge request isc-projects/bind9!8271
2023-09-05 14:00:16 +00:00
Artem Boldariev
7e967f54a4 Add CHANGES and release note for [GL #4038]
Mention that send buffer allocations/deallocations are now routed
through dedicated memory arenas.

(cherry picked from commit 60d52a49b0)
2023-09-05 15:02:30 +02:00
Artem Boldariev
1cc17f797e Allocate DNS send buffers using dedicated per-worker memory arenas
This commit ensures that memory allocations related to DNS send
buffers are routed through dedicated per-worker memory arenas in order
to decrease memory usage on high load caused by TCP-based DNS
transports.

We do that by following jemalloc developers suggestions:

https://github.com/jemalloc/jemalloc/issues/2483#issuecomment-1639019699
https://github.com/jemalloc/jemalloc/issues/2483#issuecomment-1698173849
(cherry picked from commit 01cc7edcca)
2023-09-05 15:02:30 +02:00
Artem Boldariev
f5cb14265f Add ability to set per jemalloc arena dirty and muzzy decay values
This commit adds couple of functions to change "dirty_decay_ms" and
"muzzy_decay_ms" settings on arenas associated with memory contexts.

(cherry picked from commit 6e98b58d15)
2023-09-05 15:02:30 +02:00
Artem Boldariev
16a45837ca Make it possible to create memory contexts backed by jemalloc arenas
This commit extends the internal memory management middleware code in
BIND so that memory contexts backed by dedicated jemalloc arenas can
be created. A new function (isc_mem_create_arena()) is added for that.

Moreover, it extends the existing code so that specialised memory
contexts can be created easily, should we need that functionality for
other future purposes. We have achieved that by passing the flags to
the underlying jemalloc-related calls. See the above
isc_mem_create_arena(), which can serve as an example of this.

Having this opens up possibilities for creating memory contexts tuned
for specific needs.

(cherry picked from commit 8550c52588)
2023-09-05 15:02:30 +02:00
Ondřej Surý
6d24650333 Merge branch 'artem-fix-building-on-dragonflybsd-9.18' into 'bind-9.18'
[9.18] Fix building BIND on DragonFly BSD (on both older an newer versions)

See merge request isc-projects/bind9!8272
2023-09-05 11:07:49 +00:00
Artem Boldariev
d53ecb7720 Fix building BIND on DragonFly BSD (on both older an newer versions)
This commit ensures that BIND and supplementary tools still can be
built on newer versions of DragonFly BSD. It used to be the case, but
somewhere between versions 6.2 and 6.4 the OS developers rearranged
headers and moved some function definitions around.

Before that the fact that it worked was more like a coincidence, this
time we, at least, looked at the related man pages included with the
OS.

No in depth testing has been done on this OS as we do not really
support this platform - so it is more like a goodwill act. We can,
however, use this platform for testing purposes, too. Also, we know
that the OS users do use BIND, as it is included in its ports
directory.

Building with './configure' and './configure --without-jemalloc' have
been fixed and are known to work at the time the commit is made.

(cherry picked from commit 942569a1bb)
2023-09-05 10:33:51 +02:00
Ondřej Surý
445283a67b Merge branch '4263-deprecate-dnssec-must-be-secure-feature-9.18' into 'bind-9.18'
Deprecate 'dnssec-must-be-secure' option

See merge request isc-projects/bind9!8268
2023-09-04 16:54:46 +00:00
Ondřej Surý
12935f2e70 Add CHANGES and release note for [GL #4263]
(cherry picked from commit 898f0ee3cf)
2023-09-04 17:27:38 +02:00
Ondřej Surý
c9d6f0e400 Deprecate 'dnssec-must-be-secure' option
The dnssec-must-be-secure feature was added in the early days of BIND 9
and DNSSEC and it makes sense only as a debugging feature.

Remove the feature to simplify the code.

(cherry picked from commit 9e0b348a2b)
2023-09-04 17:27:14 +02:00
Michał Kępień
8f99ee3e13 Merge branch 'michal/reorganize-vulnerability-docs-9.18' into 'bind-9.18'
[9.18] Move security-related information to SECURITY.md

See merge request isc-projects/bind9!8266
2023-09-04 10:00:36 +00:00
Michał Kępień
695624f314 Move security-related information to SECURITY.md
To follow current best practices, create a short SECURITY.md file in the
root of the repository that contains information about the project's
security policy and guidelines for reporting potential security issues.
Replace the relevant bits of text in other files with references to the
new SECURITY.md file, so that the relevant information only needs to be
maintained in one place.

Replace all occurrences of the generic security-officer@isc.org email
with a dedicated address for reporting BIND 9 security issues,
bind-security@isc.org.

(cherry picked from commit ca9fed9143)
2023-09-04 11:56:46 +02:00