Assertion failure in dns_resolver_createfetch() at resolver.c:10860
Summary
Assertion failure in dns_resolver_createfetch() at resolver.c:10860
Code snippet
isc_result_t
dns_resolver_createfetch2(dns_resolver_t *res, dns_name_t *name,
dns_rdatatype_t type,
dns_name_t *domain, dns_rdataset_t *nameservers,
dns_forwarders_t *forwarders,
isc_sockaddr_t *client, dns_messageid_t id,
unsigned int options, isc_task_t *task,
isc_taskaction_t action, void *arg,
dns_rdataset_t *rdataset,
dns_rdataset_t *sigrdataset,
dns_fetch_t **fetchp)
{
... snip
REQUIRE(!dns_rdataset_isassociated(rdataset));
REQUIRE(sigrdataset == NULL ||
!dns_rdataset_isassociated(sigrdataset)); ---> **Crashes here **
isc_boolean_t
dns_rdataset_isassociated(dns_rdataset_t *rdataset) {
/*
* Is 'rdataset' associated?
*/
REQUIRE(DNS_RDATASET_VALID(rdataset));
if (**rdataset->methods** != NULL)
return (ISC_TRUE); ----------> **returns true here**
return (ISC_FALSE);
}
The sigrdataset seems to be associated (the methods pointer is loaded) and this routine doesn't expect the sigrdataset to be associated while performing lookup of the Additional Records in the dynamic-cache.
resolver.c:REQUIRE(sigrdataset == ((void*)0) || !dns_rdataset_isassociated(sigrdataset)) failed
exiting (due to assertion failure)
Crash signature
Trap Type = SIGABRT
libc-2.19.so + 0x36c37
libagwCmnDns.so!dns_resolver_createfetch + 0x26
libagwCmnDns.so!dns_lookup_create + 0xbc1
libagwCmnDns.so!dns_lookup_create + 0x2af
libagwCmnLwresdProc.so!ns_lwdclient_processgrbn + 0x3a3
libagwCmnLwresdProc.so!ns_lwdclient_processgrbn + 0x244
libagwCmnLwresdProc.so!ns_lwdclient_recv + 0x340
libagwCmnIsc.so!isc_taskmgr_create + 0x689
libpthread-2.19.so + 0x8184
libc-2.19.so + 0xfe0ad
BIND version used
BIND v9.18.15
Steps to reproduce
- During LTE Attach call flow, MME makes DNS APN NAPTR query with the DO bit set (DNSSEC)in the Additional records, to resolve the PGW.
- DNS server responds with RRSIG DATA and TTL in them, in the Additional records.
- The response is stored in the dynamic cache in MME (rbtdb.c)
- After the TTL expires in the dynamic cache, run the same Attach call flow and the application will crash due to the assertion failure.
Thanks, Rahul
Edited by Rahul-2309