From 973ac1d8912d8d885e9a002ffee4acbaf23e9c81 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Tue, 4 Jan 2022 12:08:43 -0800 Subject: [PATCH 1/2] Prevent a shutdown race in catz_create_chg_task() If a catz event is scheduled while the task manager was being shut down, task-exclusive mode is unavailable. This needs to be handled as an error rather than triggering an assertion. --- bin/named/server.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/bin/named/server.c b/bin/named/server.c index 8e27090da8..4e741cb385 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -2902,11 +2902,16 @@ static isc_result_t catz_create_chg_task(dns_catz_entry_t *entry, dns_catz_zone_t *origin, dns_view_t *view, isc_taskmgr_t *taskmgr, void *udata, isc_eventtype_t type) { - catz_chgzone_event_t *event; - isc_task_t *task; + catz_chgzone_event_t *event = NULL; + isc_task_t *task = NULL; isc_result_t result; isc_taskaction_t action = NULL; + result = isc_taskmgr_excltask(taskmgr, &task); + if (result != ISC_R_SUCCESS) { + return (result); + } + switch (type) { case DNS_EVENT_CATZADDZONE: case DNS_EVENT_CATZMODZONE: @@ -2917,6 +2922,7 @@ catz_create_chg_task(dns_catz_entry_t *entry, dns_catz_zone_t *origin, break; default: REQUIRE(0); + ISC_UNREACHABLE(); } event = (catz_chgzone_event_t *)isc_event_allocate( @@ -2927,13 +2933,11 @@ catz_create_chg_task(dns_catz_entry_t *entry, dns_catz_zone_t *origin, event->origin = NULL; event->view = NULL; event->mod = (type == DNS_EVENT_CATZMODZONE); + dns_catz_entry_attach(entry, &event->entry); dns_catz_zone_attach(origin, &event->origin); dns_view_attach(view, &event->view); - task = NULL; - result = isc_taskmgr_excltask(taskmgr, &task); - REQUIRE(result == ISC_R_SUCCESS); isc_task_send(task, ISC_EVENT_PTR(&event)); isc_task_detach(&task); From 81c09b005beaed8e5f1be930f52146d76ad42148 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Tue, 4 Jan 2022 12:14:32 -0800 Subject: [PATCH 2/2] Add CHANGES note for [GL #3074] --- CHANGES | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES b/CHANGES index d709e9b3aa..0c40162026 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +5788. [bug] An assertion could occur if a catalog zone event was + scheduled while the task manager was being shut + down. [GL #3074] + 5787. [doc] Update 'auto-dnssec' documentation, it may only be activated at zone level. [GL #3023]