mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-14 02:39:59 -04:00
Fix invalid dns message state in resolver's logic
The assertion failure REQUIRE(msg->state == DNS_SECTION_ANY), caused by calling dns_message_setclass within function resquery_response() in resolver.c, was happening due to wrong management of dns message_t objects used to process responses to the queries issued by the resolver. Before the fix, a resolver's fetch context (fetchctx_t) would hold a pointer to the message, this same reference would then be used over all the attempts to resolve the query, trying next server, etc... for this to work the message object would have it's state reset between each iteration, marking it as ready for a new processing. The problem arose in a scenario with many different forwarders configured, managing the state of the dns_message_t object was lacking better synchronization, which have led it to a invalid dns_message_t state in resquery_response(). Instead of adding unnecessarily complex code to synchronize the object, the dns_message_t object was moved from fetchctx_t structure to the query structure, where it better belongs to, since each query will produce a response, this way whenever a new query is created an associated dns_messate_t is also created. This commit deals mainly with moving the dns_message_t object from fetchctx_t to the query structure.
This commit is contained in:
parent
12d6d13100
commit
02f9e125c1
1 changed files with 205 additions and 195 deletions
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue