From: Ondřej Surý Date: Wed, 9 Nov 2022 17:04:23 +0000 (+0100) Subject: Don't use view->resolver directly when priming in dns_view_find() X-Git-Tag: v9.19.8~64^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a8ba2403254ea120f31f849ee7f0cb2f996e6c2a;p=thirdparty%2Fbind9.git 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. --- diff --git a/lib/dns/view.c b/lib/dns/view.c index 38fb06a6656..e2cd0c1577b 100644 --- a/lib/dns/view.c +++ b/lib/dns/view.c @@ -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;