mirror of
https://github.com/isc-projects/bind9.git
synced 2026-02-27 12:02:10 -05:00
Don't issue ns_client_endrequest on a NS_CLIENTSTATE_READY client.
Fix a potential assertion failure on shutdown in ns__client_endrequest.
Scenario:
1. We are shutting down, interface->clientmgr is gone.
2. We receive a packet, it gets through ns__client_request
3. mgr == NULL, return
4. isc_nmhandle_detach calls ns_client_reset_cb
5. ns_client_reset_cb calls ns_client_endrequest
6. INSIST(client->state == NS_CLIENTSTATE_WORKING ||
client->state == NS_CLIENTSTATE_RECURSING) is not met
- we haven't started processing this packet so
client->state == NS_CLIENTSTATE_READY.
As a solution - don't do anything in ns_client_reset_cb if the client
is still in READY state.
(cherry picked from commit b0888ff039)
This commit is contained in:
parent
9f7acb1dd0
commit
c8dd7e07cd
1 changed files with 8 additions and 0 deletions
|
|
@ -1577,6 +1577,14 @@ ns__client_reset_cb(void *client0) {
|
|||
ns_client_log(client, DNS_LOGCATEGORY_SECURITY, NS_LOGMODULE_CLIENT,
|
||||
ISC_LOG_DEBUG(3), "reset client");
|
||||
|
||||
/*
|
||||
* We never started processing this client, possible if we're
|
||||
* shutting down, just exit.
|
||||
*/
|
||||
if (client->state == NS_CLIENTSTATE_READY) {
|
||||
return;
|
||||
}
|
||||
|
||||
ns_client_endrequest(client);
|
||||
if (client->tcpbuf != NULL) {
|
||||
isc_mem_put(client->mctx, client->tcpbuf,
|
||||
|
|
|
|||
Loading…
Reference in a new issue