make sure new_zone_lock is locked before unlocking it
it was possible for the count_newzones() function to try to
unlock view->new_zone_lock on return before locking it, which
caused a crash on shutdown.
(cherry picked from commit ed37c63e2b)
This commit is contained in:
+6
-6
@@ -7575,6 +7575,8 @@ count_newzones(dns_view_t *view, ns_cfgctx_t *nzcfg, int *num_zonesp) {
|
||||
|
||||
REQUIRE(num_zonesp != NULL);
|
||||
|
||||
LOCK(&view->new_zone_lock);
|
||||
|
||||
CHECK(migrate_nzf(view));
|
||||
|
||||
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
|
||||
@@ -7583,8 +7585,6 @@ count_newzones(dns_view_t *view, ns_cfgctx_t *nzcfg, int *num_zonesp) {
|
||||
"for view '%s'",
|
||||
view->new_zone_db, view->name);
|
||||
|
||||
LOCK(&view->new_zone_lock);
|
||||
|
||||
CHECK(nzd_count(view, &n));
|
||||
|
||||
*num_zonesp = n;
|
||||
@@ -12913,6 +12913,10 @@ cleanup:
|
||||
return (result);
|
||||
}
|
||||
|
||||
/*
|
||||
* Migrate zone configuration from an NZF file to an NZD database.
|
||||
* Caller must hold view->new_zone_lock.
|
||||
*/
|
||||
static isc_result_t
|
||||
migrate_nzf(dns_view_t *view) {
|
||||
isc_result_t result;
|
||||
@@ -12928,8 +12932,6 @@ migrate_nzf(dns_view_t *view) {
|
||||
MDB_val key, data;
|
||||
ns_dzarg_t dzarg;
|
||||
|
||||
LOCK(&view->new_zone_lock);
|
||||
|
||||
/*
|
||||
* If NZF file doesn't exist, or NZD DB exists and already
|
||||
* has data, return without attempting migration.
|
||||
@@ -13065,8 +13067,6 @@ cleanup:
|
||||
result = nzd_close(&txn, commit);
|
||||
}
|
||||
|
||||
UNLOCK(&view->new_zone_lock);
|
||||
|
||||
if (text != NULL) {
|
||||
isc_buffer_free(&text);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user