bind9/lib
Michał Kępień 8f8a69aa0a Fix handling of mismatched responses past timeout
When a UDP dispatch receives a mismatched response, it checks whether
there is still enough time to wait for the correct one to arrive before
the timeout fires.  If there is not, the result code is set to
ISC_R_TIMEDOUT, but it is not subsequently used anywhere as 'response'
is set to NULL a few lines earlier.  This results in the higher-level
read callback (resquery_response() in case of resolver code) not being
called.  However, shortly afterwards, a few levels up the call chain,
isc__nm_udp_read_cb() calls isc__nmsocket_timer_stop() on the dispatch
socket, effectively disabling read timeout handling for that socket.
Combined with the fact that reading is not restarted in such a case
(e.g. by calling dispatch_getnext() from udp_recv()), this leads to the
higher-level query structure remaining referenced indefinitely because
the dispatch socket it uses will neither be read from nor closed due to
a timeout.  This in turn causes fetch contexts to linger around
indefinitely, which in turn i.a. prevents certain cache nodes (those
containing rdatasets used by fetch contexts, like fctx->nameservers)
from being cleaned.

Fix by making sure the higher-level callback does get invoked with the
ISC_R_TIMEDOUT result code when udp_recv() determines there is no more
time left to receive the correct UDP response before the timeout fires.
This allows the higher-level callback to clean things up, preventing the
reference leak described above.
2021-11-23 15:35:39 +01:00
..
bind9 Be less strict regarding "tls" statements in the configuration file 2021-10-30 11:54:33 +03:00
dns Fix handling of mismatched responses past timeout 2021-11-23 15:35:39 +01:00
irs Check parsed resconf values 2021-08-12 09:52:52 -07:00
isc address '--disable-doh' failures 2021-11-17 13:48:43 -08:00
isccc Use #pragma once as header guards 2021-10-13 00:49:15 -07:00
isccfg Replace ARRAYSIZE with ARRAY_SIZE 2021-11-02 16:14:40 +11:00
ns Add EDE to query messages 2021-11-19 09:44:28 +01:00
.gitignore The isc/platform.h header has been completely removed 2021-07-06 05:33:48 +00:00
Makefile.am move samples/resolve.c to bin/tests/system 2021-04-16 14:29:43 +02:00
unit-test-driver.sh.in Enforce a run time limit on unit test binaries 2021-04-07 11:41:45 +02:00