From: Witold Kręcicki Date: Thu, 21 May 2020 09:18:53 +0000 (+0200) Subject: Fix assertion failure during startup when the server is under load. X-Git-Tag: v9.17.3~22^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b4f3fafcffad55e64ec8958691db41a417320bb0;p=thirdparty%2Fbind9.git Fix assertion failure during startup when the server is under load. When we're coming back from recursion fetch_callback does not accept DNS_R_NXDOMAIN as an rcode - query_gotanswer calls query_nxdomain in which an assertion fails on qctx->is_zone. Yet, under some circumstances, qname minimization will return an DNS_R_NXDOMAIN - when root zone mirror is not yet loaded. The fix changes the DNS_R_NXDOMAIN answer to DNS_R_SERVFAIL. --- diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index 5a1f0c9f06a..8aa78191e87 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -4397,6 +4397,15 @@ resume_qmin(isc_task_t *task, isc_event_t *event) { fctx->now, findoptions, true, true, &fctx->nameservers, NULL); + /* + * DNS_R_NXDOMAIN here means we have not loaded the root zone mirror + * yet - but DNS_R_NXDOMAIN is not a valid return value when doing + * recursion, we need to patch it. + */ + if (result == DNS_R_NXDOMAIN) { + result = DNS_R_SERVFAIL; + } + if (result != ISC_R_SUCCESS) { fctx_done(fctx, result, __LINE__); goto cleanup;