From: Vladimír Čunát Date: Fri, 26 Mar 2021 10:58:42 +0000 (+0100) Subject: clear kr_query::flags.CACHED X-Git-Tag: v5.3.2~11^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a10d7b5199bd402d6c9277f2eee15d2b65200dfc;p=thirdparty%2Fknot-resolver.git clear kr_query::flags.CACHED I suspect there's an edge case where cache thinks it provided enough data but iterator (or who) disagrees and resolution continues. We observed (flags.CACHED == true) even when processing a reply from internet, and that could be confusing and even trigger a segfault. Clearing the flag sounds OK semantically; it never meant that no cached data have been used within the kr_query (e.g. zone cut, DS/DNSKEY, ...) --- diff --git a/lib/layer/iterate.c b/lib/layer/iterate.c index 94342cfb5..65fce45da 100644 --- a/lib/layer/iterate.c +++ b/lib/layer/iterate.c @@ -963,6 +963,7 @@ static int prepare_query(kr_layer_t *ctx, knot_pkt_t *pkt) query->uid = req->rplan.next_uid; req->rplan.next_uid += 1; + query->flags.CACHED = false; // in case it got left from earlier (unknown edge case) return KR_STATE_CONSUME; }