Merge branch '4502-missing-reference-9.18' into 'bind-9.18'

[9.18] Resolve "Missing reference?"

See merge request isc-projects/bind9!9024
This commit is contained in:
Mark Andrews 2024-05-13 23:52:31 +00:00
commit 6ef02ffd69
3 changed files with 26 additions and 19 deletions

View file

@ -1,3 +1,7 @@
6386. [bug] When shutting down catzs->view could point to freed
memory. Obtain a reference to the view to prevent this.
[GL #4502]
6385. [func] Relax SVCB alias mode checks to allow parameters.
[GL #4704]

View file

@ -2704,7 +2704,7 @@ catz_addmodzone_taskaction(isc_task_t *task, isc_event_t *event0) {
goto cleanup;
}
result = dns_zt_find(ev->view->zonetable, name, 0, NULL, &zone);
result = dns_view_findzone(ev->view, name, &zone);
if (ev->mod) {
dns_catz_zone_t *parentcatz;
@ -2881,7 +2881,7 @@ cleanup:
}
dns_catz_entry_detach(ev->origin, &ev->entry);
dns_catz_detach_catz(&ev->origin);
dns_view_detach(&ev->view);
dns_view_weakdetach(&ev->view);
isc_event_free(ISC_EVENT_PTR(&ev));
}
@ -2899,8 +2899,8 @@ catz_delzone_taskaction(isc_task_t *task, isc_event_t *event0) {
dns_name_format(dns_catz_entry_getname(ev->entry), cname,
DNS_NAME_FORMATSIZE);
result = dns_zt_find(ev->view->zonetable,
dns_catz_entry_getname(ev->entry), 0, NULL, &zone);
result = dns_view_findzone(ev->view, dns_catz_entry_getname(ev->entry),
&zone);
if (result != ISC_R_SUCCESS) {
isc_log_write(named_g_lctx, NAMED_LOGCATEGORY_GENERAL,
NAMED_LOGMODULE_SERVER, ISC_LOG_WARNING,
@ -2956,7 +2956,7 @@ cleanup:
}
dns_catz_entry_detach(ev->origin, &ev->entry);
dns_catz_detach_catz(&ev->origin);
dns_view_detach(&ev->view);
dns_view_weakdetach(&ev->view);
isc_event_free(ISC_EVENT_PTR(&ev));
}
@ -2998,7 +2998,7 @@ catz_create_chg_task(dns_catz_entry_t *entry, dns_catz_zone_t *origin,
dns_catz_entry_attach(entry, &event->entry);
dns_catz_attach_catz(origin, &event->origin);
dns_view_attach(view, &event->view);
dns_view_weakattach(view, &event->view);
isc_task_send(task, ISC_EVENT_PTR(&event));
isc_task_detach(&task);

View file

@ -525,7 +525,7 @@ dns__catz_zones_merge(dns_catz_zone_t *catz, dns_catz_zone_t *newcatz) {
result = delcur ? isc_ht_iter_delcurrent_next(iter1)
: isc_ht_iter_next(iter1))
{
isc_result_t zt_find_result;
isc_result_t find_result;
dns_catz_zone_t *parentcatz = NULL;
dns_catz_entry_t *nentry = NULL;
dns_catz_entry_t *oentry = NULL;
@ -558,10 +558,10 @@ dns__catz_zones_merge(dns_catz_zone_t *catz, dns_catz_zone_t *newcatz) {
&catz->zoneoptions, &nentry->opts);
/* Try to find the zone in the view */
zt_find_result = dns_zt_find(catz->catzs->view->zonetable,
dns_catz_entry_getname(nentry), 0,
NULL, &zone);
if (zt_find_result == ISC_R_SUCCESS) {
find_result = dns_view_findzone(catz->catzs->view,
dns_catz_entry_getname(nentry),
&zone);
if (find_result == ISC_R_SUCCESS) {
dns_catz_coo_t *coo = NULL;
char pczname[DNS_NAME_FORMATSIZE];
bool parentcatz_locked = false;
@ -606,10 +606,6 @@ dns__catz_zones_merge(dns_catz_zone_t *catz, dns_catz_zone_t *newcatz) {
UNLOCK(&parentcatz->lock);
LOCK(&catz->lock);
}
}
if (zt_find_result == ISC_R_SUCCESS ||
zt_find_result == DNS_R_PARTIALMATCH)
{
dns_zone_detach(&zone);
}
@ -617,8 +613,7 @@ dns__catz_zones_merge(dns_catz_zone_t *catz, dns_catz_zone_t *newcatz) {
result = isc_ht_find(catz->entries, key, (uint32_t)keysize,
(void **)&oentry);
if (result != ISC_R_SUCCESS) {
if (zt_find_result == ISC_R_SUCCESS &&
parentcatz == catz)
if (find_result == ISC_R_SUCCESS && parentcatz == catz)
{
/*
* This means that the zone's unique label
@ -645,7 +640,7 @@ dns__catz_zones_merge(dns_catz_zone_t *catz, dns_catz_zone_t *newcatz) {
continue;
}
if (zt_find_result != ISC_R_SUCCESS) {
if (find_result != ISC_R_SUCCESS) {
isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL,
DNS_LOGMODULE_MASTER, ISC_LOG_DEBUG(3),
"catz: zone '%s' was expected to exist "
@ -818,7 +813,12 @@ dns_catz_catzs_set_view(dns_catz_zones_t *catzs, dns_view_t *view) {
/* Either it's a new one or it's being reconfigured. */
REQUIRE(catzs->view == NULL || !strcmp(catzs->view->name, view->name));
catzs->view = view;
if (catzs->view == NULL) {
dns_view_weakattach(view, &catzs->view);
} else if (catzs->view != view) {
dns_view_weakdetach(&catzs->view);
dns_view_weakattach(view, &catzs->view);
}
}
isc_result_t
@ -1034,6 +1034,9 @@ dns__catz_zones_destroy(dns_catz_zones_t *catzs) {
isc_task_detach(&catzs->updater);
isc_mutex_destroy(&catzs->lock);
isc_refcount_destroy(&catzs->references);
if (catzs->view != NULL) {
dns_view_weakdetach(&catzs->view);
}
isc_mem_putanddetach(&catzs->mctx, catzs, sizeof(*catzs));
}