2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-04 00:25:29 +00:00

4553. [bug] Named could deadlock there were multiple changes to

NSEC/NSEC3 parameters for a zone being processed at
                        the same time. [RT #42770]
This commit is contained in:
Mark Andrews
2017-01-12 14:25:45 +11:00
parent 42924b40af
commit d2e1b47d4f
4 changed files with 26 additions and 8 deletions

View File

@@ -1,3 +1,7 @@
4553. [bug] Named could deadlock there were multiple changes to
NSEC/NSEC3 parameters for a zone being processed at
the same time. [RT #42770]
4552. [bug] Named could trigger a assertion when sending notify
messages. [RT #44019]

View File

@@ -195,6 +195,13 @@
<section xml:id="relnotes_bugs"><info><title>Bug Fixes</title></info>
<itemizedlist>
<listitem>
<para>
Named could deadlock there were multiple changes to
NSEC/NSEC3 parameters for a zone being processed at the
same time. [RT #42770]
</para>
</listitem>
<listitem>
<para>
Named could trigger a assertion when sending notify

View File

@@ -9270,6 +9270,9 @@ dbiterator_first(dns_dbiterator_t *iterator) {
rbtdbiter->result = result;
if (result != ISC_R_SUCCESS)
ENSURE(!rbtdbiter->paused);
return (result);
}

View File

@@ -7475,6 +7475,9 @@ zone_nsec3chain(dns_zone_t *zone) {
nsec3chain->save_delete_nsec = nsec3chain->delete_nsec;
}
if (nsec3chain != NULL)
goto skip_removals;
/*
* Process removals.
*/
@@ -7682,6 +7685,7 @@ zone_nsec3chain(dns_zone_t *zone) {
first = ISC_TRUE;
}
skip_removals:
/*
* We may need to update the NSEC/NSEC3 records for the zone apex.
*/
@@ -7744,9 +7748,6 @@ zone_nsec3chain(dns_zone_t *zone) {
}
}
if (nsec3chain != NULL)
dns_dbiterator_pause(nsec3chain->dbiterator);
/*
* Add / update signatures for the NSEC3 records.
*/
@@ -8460,6 +8461,14 @@ zone_sign(dns_zone_t *zone) {
}
failure:
/*
* Pause all dbiterators.
*/
for (signing = ISC_LIST_HEAD(zone->signing);
signing != NULL;
signing = ISC_LIST_NEXT(signing, link))
dns_dbiterator_pause(signing->dbiterator);
/*
* Rollback the cleanup list.
*/
@@ -8472,11 +8481,6 @@ zone_sign(dns_zone_t *zone) {
signing = ISC_LIST_HEAD(cleanup);
}
for (signing = ISC_LIST_HEAD(zone->signing);
signing != NULL;
signing = ISC_LIST_NEXT(signing, link))
dns_dbiterator_pause(signing->dbiterator);
dns_diff_clear(&_sig_diff);
for (i = 0; i < nkeys; i++)