Don't use view->resolver directly when priming in dns_view_find()

When starting priming from dns_view_find(), the dns_view shutdown could
be initiated by different thread, detaching from the resolver.  Use
dns_view_getresolver() to attach to the resolver under view->lock, so we
don't try to call dns_resolver_prime() with NULL pointer.

There are more accesses to view->resolver, (and also view->adb and
view->requestmgr that suffer from the same problem) in the dns_view
module, but they are all done in exclusive mode or under a view->lock.
This commit is contained in:
Ondřej Surý 2022-11-09 18:04:23 +01:00 committed by Ondřej Surý
parent 54a425ab57
commit a8ba240325

View file

@ -1037,9 +1037,14 @@ db_find:
* We just used a hint. Let the resolver know it
* should consider priming.
*/
dns_resolver_prime(view->resolver);
dns_db_attach(view->hints, &db);
result = DNS_R_HINT;
dns_resolver_t *res = NULL;
result = dns_view_getresolver(view, &res);
if (result == ISC_R_SUCCESS) {
dns_resolver_prime(res);
dns_db_attach(view->hints, &db);
dns_resolver_detach(&res);
result = DNS_R_HINT;
}
} else if (result == DNS_R_NXRRSET) {
dns_db_attach(view->hints, &db);
result = DNS_R_HINTNXRRSET;