From a227e4606fac0788bf5818b6d9daeae2a74d77ec Mon Sep 17 00:00:00 2001 From: Aram Sargsyan Date: Mon, 13 Apr 2026 16:58:56 +0000 Subject: [PATCH] Fix a lock/unlock bug in server.c:do_modzone() The cleanup path always unlocks the 'view->newzone.lock' lock, but there are 'goto cleanup;' operations even before the lock is locked, which causes an assertion failure. Don't use the cleanup path before the lock is locked. --- bin/named/server.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/bin/named/server.c b/bin/named/server.c index 7b676197aa..34ea760143 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -12341,8 +12341,11 @@ do_modzone(named_server_t *server, dns_view_t *view, dns_name_t *name, if (!view->newzone.allowed) { result = ISC_R_NOPERM; - TCHECK(putstr(text, "new zone configuration is not allowed")); - goto cleanup; + tresult = putstr(text, "new zone configuration is not allowed"); + if (tresult != ISC_R_SUCCESS) { + isc_buffer_clear(text); + } + return result; } /* Zone must already exist */ @@ -12357,7 +12360,7 @@ do_modzone(named_server_t *server, dns_view_t *view, dns_name_t *name, result = dns_view_findzone(view, name, DNS_ZTFIND_EXACT, &zone); } if (result != ISC_R_SUCCESS) { - goto cleanup; + return result; } added = dns_zone_getadded(zone);