From: Aram Sargsyan Date: Mon, 13 Apr 2026 16:58:56 +0000 (+0000) Subject: Fix a lock/unlock bug in server.c:do_modzone() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a227e4606fac0788bf5818b6d9daeae2a74d77ec;p=thirdparty%2Fbind9.git 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. --- diff --git a/bin/named/server.c b/bin/named/server.c index 7b676197aa2..34ea760143d 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);