mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-31 14:35:26 +00:00
Add shutdown checks in dns_catz_dbupdate_callback()
When a zone database update callback is called, the 'catzs' object, extracted from the callback argument, might be already shutting down, in which case the 'catzs->zones' can be NULL and cause an assertion failure when calling isc_ht_find(). Add an early return from the callback if 'catzs->shuttingdown' is true. Also check the validity of 'catzs->zones' after locking 'catzs' in case there is a race with dns_catz_shutdown_catzs() running in another thread.
This commit is contained in:
@@ -2137,9 +2137,17 @@ dns_catz_dbupdate_callback(dns_db_t *db, void *fn_arg) {
|
||||
REQUIRE(DNS_CATZ_ZONES_VALID(fn_arg));
|
||||
catzs = (dns_catz_zones_t *)fn_arg;
|
||||
|
||||
if (atomic_load(&catzs->shuttingdown)) {
|
||||
return (ISC_R_SHUTTINGDOWN);
|
||||
}
|
||||
|
||||
dns_name_toregion(&db->origin, &r);
|
||||
|
||||
LOCK(&catzs->lock);
|
||||
if (catzs->zones == NULL) {
|
||||
result = ISC_R_SHUTTINGDOWN;
|
||||
goto cleanup;
|
||||
}
|
||||
result = isc_ht_find(catzs->zones, r.base, r.length, (void **)&catz);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
goto cleanup;
|
||||
|
Reference in New Issue
Block a user