mirror of
https://github.com/isc-projects/bind9.git
synced 2026-02-23 09:51:03 -05:00
[v9_9] reference leak with AAAA glue but not A
4004. [bug] When delegations had AAAA glue but not A, a reference could be leaked causing an assertion failure on shutdown. [RT #37796] (cherry picked from commitc4abb19716) (cherry picked from commit96b6923a25)
This commit is contained in:
parent
9b48b3dc34
commit
f6e2e95a7d
4 changed files with 45 additions and 3 deletions
4
CHANGES
4
CHANGES
|
|
@ -1,3 +1,7 @@
|
|||
4004. [bug] When delegations had AAAA glue but not A, a
|
||||
reference could be leaked causing an assertion
|
||||
failure on shutdown. [RT #37796]
|
||||
|
||||
4000. [bug] NXDOMAIN redirection incorrectly handled NXRRSET
|
||||
from the redirect zone. [RT #37722]
|
||||
|
||||
|
|
|
|||
|
|
@ -488,7 +488,33 @@ main(int argc, char **argv) {
|
|||
|
||||
isc_commandline_errprint = ISC_FALSE;
|
||||
|
||||
while ((c = isc_commandline_parse(argc, argv, "dhjt:pvxz")) != EOF) {
|
||||
/*
|
||||
* Process memory debugging argument first.
|
||||
*/
|
||||
#define CMDLINE_FLAGS "dhjm:t:pvxz"
|
||||
while ((c = isc_commandline_parse(argc, argv, CMDLINE_FLAGS)) != -1) {
|
||||
switch (c) {
|
||||
case 'm':
|
||||
if (strcasecmp(isc_commandline_argument, "record") == 0)
|
||||
isc_mem_debugging |= ISC_MEM_DEBUGRECORD;
|
||||
if (strcasecmp(isc_commandline_argument, "trace") == 0)
|
||||
isc_mem_debugging |= ISC_MEM_DEBUGTRACE;
|
||||
if (strcasecmp(isc_commandline_argument, "usage") == 0)
|
||||
isc_mem_debugging |= ISC_MEM_DEBUGUSAGE;
|
||||
if (strcasecmp(isc_commandline_argument, "size") == 0)
|
||||
isc_mem_debugging |= ISC_MEM_DEBUGSIZE;
|
||||
if (strcasecmp(isc_commandline_argument, "mctx") == 0)
|
||||
isc_mem_debugging |= ISC_MEM_DEBUGCTX;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
isc_commandline_reset = ISC_TRUE;
|
||||
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
|
||||
while ((c = isc_commandline_parse(argc, argv, CMDLINE_FLAGS)) != EOF) {
|
||||
switch (c) {
|
||||
case 'd':
|
||||
debug++;
|
||||
|
|
@ -498,6 +524,9 @@ main(int argc, char **argv) {
|
|||
nomerge = ISC_FALSE;
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
break;
|
||||
|
||||
case 't':
|
||||
result = isc_dir_chroot(isc_commandline_argument);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
|
|
@ -557,8 +586,6 @@ main(int argc, char **argv) {
|
|||
InitSockets();
|
||||
#endif
|
||||
|
||||
RUNTIME_CHECK(isc_mem_create(0, 0, &mctx) == ISC_R_SUCCESS);
|
||||
|
||||
RUNTIME_CHECK(setup_logging(mctx, stdout, &logc) == ISC_R_SUCCESS);
|
||||
|
||||
RUNTIME_CHECK(isc_entropy_create(mctx, &ectx) == ISC_R_SUCCESS);
|
||||
|
|
|
|||
|
|
@ -165,6 +165,15 @@
|
|||
is not present will now return NOERROR instead of NXDOMAIN.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
When a zone contained a delegation to an IPv6 name server
|
||||
but not an IPv4 name server, it was possible for a memory
|
||||
reference to be left un-freed. This caused an assertion
|
||||
failure on server shutdown, but was otherwise harmless.
|
||||
[RT #37796]
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect2>
|
||||
<sect2 id="end_of_life">
|
||||
|
|
|
|||
|
|
@ -2342,6 +2342,8 @@ zone_check_glue(dns_zone_t *zone, dns_db_t *db, dns_name_t *name,
|
|||
DNS_DBFIND_GLUEOK, 0, NULL,
|
||||
foundname, &aaaa, NULL);
|
||||
if (tresult == ISC_R_SUCCESS) {
|
||||
if (dns_rdataset_isassociated(&a))
|
||||
dns_rdataset_disassociate(&a);
|
||||
dns_rdataset_disassociate(&aaaa);
|
||||
return (ISC_TRUE);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue