mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-31 14:35:26 +00:00
Merge branch '3542-gracefuly-handle-cancelled-http-read-during-sending' into 'main'
Handle canceled read during sending data over stats channel Closes #3542 See merge request isc-projects/bind9!6773
This commit is contained in:
4
CHANGES
4
CHANGES
@@ -1,3 +1,7 @@
|
|||||||
|
5972. [bug] Gracefully handle when the statschannel HTTP connection
|
||||||
|
gets cancelled during sending data back to the client.
|
||||||
|
[GL #3542]
|
||||||
|
|
||||||
5971. [func] Add libsystemd sd_notify() support. [GL #1176]
|
5971. [func] Add libsystemd sd_notify() support. [GL #1176]
|
||||||
|
|
||||||
5970. [func] Log the reason why a query was refused. [GL !6669]
|
5970. [func] Log the reason why a query was refused. [GL !6669]
|
||||||
|
@@ -5876,9 +5876,21 @@ If no port is specified, port 80 is used for HTTP channels. The asterisk
|
|||||||
Attempts to open a statistics channel are restricted by the
|
Attempts to open a statistics channel are restricted by the
|
||||||
optional ``allow`` clause. Connections to the statistics channel are
|
optional ``allow`` clause. Connections to the statistics channel are
|
||||||
permitted based on the :term:`address_match_list`. If no ``allow`` clause is
|
permitted based on the :term:`address_match_list`. If no ``allow`` clause is
|
||||||
present, :iscman:`named` accepts connection attempts from any address; since
|
present, :iscman:`named` accepts connection attempts from any address. Since
|
||||||
the statistics may contain sensitive internal information, it is highly
|
the statistics may contain sensitive internal information, the source of
|
||||||
recommended to restrict the source of connection requests appropriately.
|
connection requests must be restricted appropriately so that only
|
||||||
|
trusted parties can access the statistics channel.
|
||||||
|
|
||||||
|
Gathering data exposed by the statistics channel locks various subsystems in
|
||||||
|
:iscman:`named`, which could slow down query processing if statistics data is
|
||||||
|
requested too often.
|
||||||
|
|
||||||
|
An issue in the statistics channel would be considered a security issue
|
||||||
|
only if it could be exploited by unprivileged users circumventing the access
|
||||||
|
control list. In other words, any issue in the statistics channel that could be
|
||||||
|
used to access information unavailable otherwise, or to crash :iscman:`named`, is
|
||||||
|
not considered a security issue if it can be avoided through the
|
||||||
|
use of a secure configuration.
|
||||||
|
|
||||||
If no :any:`statistics-channels` statement is present, :iscman:`named` does not
|
If no :any:`statistics-channels` statement is present, :iscman:`named` does not
|
||||||
open any communication channels.
|
open any communication channels.
|
||||||
|
@@ -60,4 +60,5 @@ Feature Changes
|
|||||||
Bug Fixes
|
Bug Fixes
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
|
|
||||||
- None.
|
- An assertion failure was fixed in ``named`` that was caused by aborting the statistics
|
||||||
|
channel connection while sending statistics data to the client. :gl:`#3542`
|
||||||
|
@@ -907,13 +907,14 @@ httpd_request(isc_nmhandle_t *handle, isc_result_t eresult,
|
|||||||
|
|
||||||
httpd = isc_nmhandle_getdata(handle);
|
httpd = isc_nmhandle_getdata(handle);
|
||||||
|
|
||||||
REQUIRE(httpd->state == RECV);
|
|
||||||
REQUIRE(httpd->handle == handle);
|
REQUIRE(httpd->handle == handle);
|
||||||
|
|
||||||
if (eresult != ISC_R_SUCCESS) {
|
if (eresult != ISC_R_SUCCESS) {
|
||||||
goto cleanup_readhandle;
|
goto cleanup_readhandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
REQUIRE(httpd->state == RECV);
|
||||||
|
|
||||||
result = process_request(
|
result = process_request(
|
||||||
httpd, region == NULL ? &(isc_region_t){ NULL, 0 } : region,
|
httpd, region == NULL ? &(isc_region_t){ NULL, 0 } : region,
|
||||||
&buflen);
|
&buflen);
|
||||||
@@ -1200,7 +1201,6 @@ httpd_senddone(isc_nmhandle_t *handle, isc_result_t result, void *arg) {
|
|||||||
isc_httpd_t *httpd = (isc_httpd_t *)arg;
|
isc_httpd_t *httpd = (isc_httpd_t *)arg;
|
||||||
|
|
||||||
REQUIRE(VALID_HTTPD(httpd));
|
REQUIRE(VALID_HTTPD(httpd));
|
||||||
REQUIRE(httpd->state == SEND);
|
|
||||||
REQUIRE(httpd->handle == handle);
|
REQUIRE(httpd->handle == handle);
|
||||||
|
|
||||||
isc_buffer_free(&httpd->sendbuffer);
|
isc_buffer_free(&httpd->sendbuffer);
|
||||||
@@ -1227,6 +1227,8 @@ httpd_senddone(isc_nmhandle_t *handle, isc_result_t result, void *arg) {
|
|||||||
goto cleanup_readhandle;
|
goto cleanup_readhandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
REQUIRE(httpd->state == SEND);
|
||||||
|
|
||||||
httpd->state = RECV;
|
httpd->state = RECV;
|
||||||
httpd->sendhandle = NULL;
|
httpd->sendhandle = NULL;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user