mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-23 18:47:40 -04:00
Fix resquery reference imbalance on TCP connect failure
In fctx_query(), resquery_ref(query) is called before dns_dispatch_connect() in anticipation of the resquery_connected() callback consuming the reference. When dns_dispatch_connect() fails synchronously on TCP (e.g. from dns_transport_get_tlsctx() failing in tcp_dispatch_connect()), the connect callback is never scheduled, so the extra reference is never consumed. The error path then tears down the query via manual cleanup (isc_mem_put) without going through the refcount destructor, leaving the reference imbalanced. Fix by dropping the extra reference on the error path, just after dns_dispatch_done() which cleans up the dispatch entry.
This commit is contained in:
parent
0d28e1bed2
commit
2da669490c
1 changed files with 2 additions and 1 deletions
|
|
@ -2284,10 +2284,11 @@ fctx_query(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo,
|
|||
isc_log_write(
|
||||
DNS_LOGCATEGORY_RESOLVER,
|
||||
DNS_LOGMODULE_RESOLVER, log_level,
|
||||
"Unable to establish a connection to %s: %s\n",
|
||||
"Unable to establish a connection to %s: %s",
|
||||
peerbuf, isc_result_totext(result));
|
||||
}
|
||||
dns_dispatch_done(&query->dispentry);
|
||||
resquery_unref(query);
|
||||
goto cleanup_fetch;
|
||||
} else {
|
||||
RUNTIME_CHECK(result == ISC_R_SUCCESS);
|
||||
|
|
|
|||
Loading…
Reference in a new issue