From: Aram Sargsyan Date: Wed, 27 Apr 2022 12:29:50 +0000 (+0000) Subject: Handle ISC_R_SUCCESS on a deactivated response in udp_recv() X-Git-Tag: v9.19.1~42^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e3a88862c0e0a7b9a58727b321ff1424e003fc4d;p=thirdparty%2Fbind9.git Handle ISC_R_SUCCESS on a deactivated response in udp_recv() There is a possibility for `udp_recv()` to be called with `eresult` being `ISC_R_SUCCESS`, but nevertheless with already deactivated `resp`, which can happen when the request has been canceled in the meantime. --- diff --git a/lib/dns/dispatch.c b/lib/dns/dispatch.c index 74df922623e..d4de0f74049 100644 --- a/lib/dns/dispatch.c +++ b/lib/dns/dispatch.c @@ -491,6 +491,8 @@ udp_recv(isc_nmhandle_t *handle, isc_result_t eresult, isc_region_t *region, */ if (ISC_LINK_LINKED(resp, alink)) { response = resp->response; + } else if (eresult == ISC_R_SUCCESS) { + eresult = ISC_R_CANCELED; } if (eresult != ISC_R_SUCCESS) { @@ -503,8 +505,6 @@ udp_recv(isc_nmhandle_t *handle, isc_result_t eresult, isc_region_t *region, goto done; } - INSIST(ISC_LINK_LINKED(resp, alink)); - peer = isc_nmhandle_peeraddr(handle); isc_netaddr_fromsockaddr(&netaddr, &peer);