Dear Maintainer, I just tried to reproduce the crash but did not get it. Maybe some more details of the configuration details of host.cfg and DNS server setup could help, because in my test I never reached with my IPv6 config the faulting instruction.
At least the instruction, at that address where the segfault is received, leads to the assumption that hent->h_addr_list is not a valid pointer for some reason. A workaround could be to check if the DNS result is IPv4. I guess following could achieve this: dns.c:119: - if (status == ARES_SUCCESS) { + if (status == ARES_SUCCESS && hent->h_addrtype == AF_INET && hent->h_addr_list) { But more insight could maybe give someone experiencing the crash by forwarding the output of following in the dns_simple_callback frame: print *hent x/1gx *(hent->h_addr_list) x/4ub *(hent->h_addr_list) And maybe a 'bt full' should contain a part of the UDP response. Kind regards, Bernhard (gdb) disassemble /m dns_simple_callback Dump of assembler code for function dns_simple_callback: 111 { 0x0000555555569ab0 <+0>: push %r13 0x0000555555569ab2 <+2>: push %r12 0x0000555555569ab4 <+4>: mov %rcx,%r13 # store address of hent into $r13 0x0000555555569ab7 <+7>: push %rbp 0x0000555555569ab8 <+8>: push %rbx 0x0000555555569ab9 <+9>: mov %rdi,%rbx 0x0000555555569abc <+12>: mov %esi,%ebp 0x0000555555569abe <+14>: sub $0x28,%rsp 0x0000555555569ac5 <+21>: mov %fs:0x28,%rax 0x0000555555569ace <+30>: mov %rax,0x18(%rsp) 0x0000555555569ad3 <+35>: xor %eax,%eax 112 struct dnsitem_t *dnsc = (dnsitem_t *)arg; 113 struct timespec etime; 114 115 getntimer(&etime); 0x0000555555569ac2 <+18>: mov %rsp,%rdi 0x0000555555569ad5 <+37>: callq 0x55555556c030 <getntimer> 116 tvdiff(&dnsc->resolvetime, &etime, &dnsc->resolvetime); 0x0000555555569ada <+42>: lea 0x20(%rbx),%rdi 0x0000555555569ade <+46>: mov %rsp,%rsi 0x0000555555569ae1 <+49>: mov %rdi,%rdx 0x0000555555569ae4 <+52>: callq 0x555555578790 <tvdiff> 117 pending_dns_count--; 0x0000555555569ae9 <+57>: subl $0x1,0x2287d8(%rip) # 0x5555557922c8 <pending_dns_count> 118 119 if (status == ARES_SUCCESS) { 0x0000555555569af0 <+64>: test %ebp,%ebp 0x0000555555569af2 <+66>: jne 0x555555569b30 <dns_simple_callback+128> 120 memcpy(&dnsc->addr, *(hent->h_addr_list), sizeof(dnsc->addr)); 0x0000555555569af4 <+68>: mov 0x18(%r13),%rax # store address hent->h_addr_list points to into $rax 121 dbgprintf("Got DNS result for host %s : %s\n", dnsc->name, inet_ntoa(dnsc->addr)); 0x0000555555569af8 <+72>: mov 0x228dc2(%rip),%edx # 0x5555557928c0 <debug> 0x0000555555569afe <+78>: mov (%rax),%rax 0x0000555555569b01 <+81>: test %edx,%edx => 0x0000555555569b03 <+83>: mov (%rax),%edi # store address pointed to by hent->h_addr into $edi 0x0000555555569b08 <+88>: jne 0x555555569b88 <dns_simple_callback+216> (gdb) print/x $r13 $27 = 0x5555557bd4d0 (gdb) print hent $28 = (struct hostent *) 0x5555557bd4d0 (gdb) x/1xg $r13 + 0x18 0x5555557bd4e8: 0x00005555557a8560 (gdb) print hent->h_addr_list $32 = (char **) 0x5555557a8560 (gdb) x/1xg hent->h_addr_list 0x5555557a8560: 0x00005555557a8220 (gdb) print/x $rax $33 = 0x5555557a8220 (gdb) x/4ub *(hent->h_addr_list) 0x5555557a8220: 192 168 240 240