]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
In dbiterator_prev, dereference_iter_node was being called too soon
authorMark Andrews <marka@isc.org>
Fri, 5 Dec 2025 03:25:02 +0000 (14:25 +1100)
committerAndoni Duarte Pintado <andoni@isc.org>
Tue, 9 Dec 2025 10:43:37 +0000 (11:43 +0100)
dns_rbtnodechain_prev requires the current node to still be valid
which was not always the case after dereference_iter_node was called.
Move the call to dereference_iter_node to after the dns_rbtnodechain_prev
to preserve the node.

(cherry picked from commit b677d31fca2e54ca28318dd2b86e5cfe5bedb26c)

lib/dns/rbtdb.c

index 5f99080ce3d9f54f6e87bf4a8a63c6b0fc5c7aae..0a90e216c4fd35e571aa5adeec3e556166a5b0b3 100644 (file)
@@ -4675,11 +4675,12 @@ dbiterator_prev(dns_dbiterator_t *iterator DNS__DB_FLARG) {
                resume_iteration(rbtdbiter);
        }
 
-       dereference_iter_node(rbtdbiter DNS__DB_FLARG_PASS);
-
        name = dns_fixedname_name(&rbtdbiter->name);
        origin = dns_fixedname_name(&rbtdbiter->origin);
        result = dns_rbtnodechain_prev(rbtdbiter->current, name, origin);
+
+       dereference_iter_node(rbtdbiter DNS__DB_FLARG_PASS);
+
        if (rbtdbiter->current == &rbtdbiter->nsec3chain &&
            (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN))
        {