From 770867848274653cd61371b412c106d68b5d970a Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Fri, 5 Dec 2025 14:25:02 +1100 Subject: [PATCH] In dbiterator_prev, dereference_iter_node was being called too soon 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 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c index cb7f410311..62bc97d783 100644 --- a/lib/dns/rbtdb.c +++ b/lib/dns/rbtdb.c @@ -9582,11 +9582,12 @@ dbiterator_prev(dns_dbiterator_t *iterator) { resume_iteration(rbtdbiter); } - dereference_iter_node(rbtdbiter); - name = dns_fixedname_name(&rbtdbiter->name); origin = dns_fixedname_name(&rbtdbiter->origin); result = dns_rbtnodechain_prev(rbtdbiter->current, name, origin); + + dereference_iter_node(rbtdbiter); + if (rbtdbiter->current == &rbtdbiter->nsec3chain && (result == ISC_R_SUCCESS || result == DNS_R_NEWORIGIN)) {