diff --git a/CHANGES b/CHANGES index 3311ac6650..c2509400b7 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +5454. [bug] Address a startup crash happening when server is + under load and root zone is not yet loaded. [GL #1862] + 5453. [bug] `named` would crash on shutdown when new `rndc` connection is received at the same time as shutting down. [GL #1747] diff --git a/doc/notes/notes-current.rst b/doc/notes/notes-current.rst index 1e129ffef1..bd030087bd 100644 --- a/doc/notes/notes-current.rst +++ b/doc/notes/notes-current.rst @@ -65,3 +65,6 @@ Bug Fixes - ``named`` would crash on shutdown when new ``rndc`` connection is received at the same time as shutting down. [GL #1747] + +- Fix assertion failure when server is under load and root zone is not yet + loaded. [GL #1862] diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index 5a1f0c9f06..8aa78191e8 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;