From: Mark Andrews Date: Wed, 19 Mar 2025 02:31:35 +0000 (+1100) Subject: Fix gaining adbname reference X-Git-Tag: v9.21.7~36^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8e7229f6411c193dd888fe63dac298cdf37e2099;p=thirdparty%2Fbind9.git Fix gaining adbname reference Call dns_adbname_ref before calling dns_resolver_createfetch to ensure adbname->name remains stable for the life of the fetch. --- diff --git a/lib/dns/adb.c b/lib/dns/adb.c index d32c56f3b71..55dfd83f842 100644 --- a/lib/dns/adb.c +++ b/lib/dns/adb.c @@ -2909,6 +2909,7 @@ fetch_name(dns_adbname_t *adbname, bool start_at_zone, bool no_validation, * createfetch to find deepest cached name when we're providing * domain and nameservers. */ + dns_adbname_ref(adbname); result = dns_resolver_createfetch( adb->res, adbname->name, type, name, nameservers, NULL, NULL, 0, options, depth, qc, gqc, isc_loop(), fetch_callback, adbname, @@ -2916,11 +2917,10 @@ fetch_name(dns_adbname_t *adbname, bool start_at_zone, bool no_validation, if (result != ISC_R_SUCCESS) { DP(ENTER_LEVEL, "fetch_name: createfetch failed with %s", isc_result_totext(result)); + dns_adbname_unref(adbname); goto cleanup; } - dns_adbname_ref(adbname); - if (type == dns_rdatatype_a) { adbname->fetch_a = fetch; inc_resstats(adb, dns_resstatscounter_gluefetchv4);