]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Call dns_adb_endudpfetch() on error path, if required
authorAram Sargsyan <aram@isc.org>
Fri, 21 Oct 2022 08:08:55 +0000 (08:08 +0000)
committerAram Sargsyan <aram@isc.org>
Fri, 21 Oct 2022 08:36:34 +0000 (08:36 +0000)
For UDP queries, after calling dns_adb_beginudpfetch() in fctx_query(),
make sure that dns_adb_endudpfetch() is also called on error path, in
order to adjust the quota back.

(cherry picked from commit 5da79e2be01700c1dd01e5a3f69617129036bb02)

lib/dns/resolver.c

index 6e030b17b8fa5debe4e437b0fba97767d4ce120a..5d26ebd0ff576c9ed92bba8d26ab18f92c915ff1 100644 (file)
@@ -2279,7 +2279,7 @@ fctx_query(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo,
                resquery_senddone, resquery_response, query, &query->id,
                &query->dispentry);
        if (result != ISC_R_SUCCESS) {
-               goto cleanup_dispatch;
+               goto cleanup_udpfetch;
        }
 
        /* Connect the socket */
@@ -2290,6 +2290,14 @@ fctx_query(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo,
 
        return (result);
 
+cleanup_udpfetch:
+       if (!RESQUERY_CANCELED(query)) {
+               if ((query->options & DNS_FETCHOPT_TCP) == 0) {
+                       /* Inform the ADB that we're ending a UDP fetch */
+                       dns_adb_endudpfetch(fctx->adb, addrinfo);
+               }
+       }
+
 cleanup_dispatch:
        fctx_detach(&query->fctx);