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.
This commit is contained in:
Witold Kręcicki
2020-07-01 12:25:36 +02:00
committed by Ondřej Surý
parent ee7bc2163f
commit b4f3fafcff
+9
View File
@@ -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;