Jean Wolter wrote:
Hello,
it looks like there is a bug in 2.44test1. It crashed in
nl_routechange, aparrently while dereferencing daemon->srv_save->sfd,
which is set to zero in reload_servers().
Information from the core file:
Core was generated by `dnsmasq --min-port=4096'. Program terminated
with signal 11, Segmentation fault. #0 0x0805afa9 in nl_routechange
(h=0x10) at netlink.c:245 245
while(sendto(daemon->srv_save->sfd->fd, daemon->packet,
daemon->packet_len, 0, 246
&daemon->srv_save->addr.sa, sa_len(&daemon->srv_save->addr)) == -1 &&
retry_send());
0x0805af87 <nl_routechange+53>: mov 0x8062e78,%eax 0x0805af8c
<nl_routechange+58>: pushl 0x118(%eax) #
&daemon->srv_save->addr.sa 0x0805af92 <nl_routechange+64>: push
$0x0 # 0 0x0805af94 <nl_routechange+66>: pushl
0x11c(%eax) # daemon->packet_len 0x0805af9a <nl_routechange+72>:
pushl 0xf0(%eax) # daemon->packet 0x0805afa0
<nl_routechange+78>: mov 0x118(%eax),%eax 0x0805afa6
<nl_routechange+84>: mov 0x4c(%eax),%eax 0x0805afa9
<nl_routechange+87>: pushl (%eax) #
daemon->srv_save->sfd->fd, with sfd == 0 0x0805afab
<nl_routechange+89>: call 0x8049958 <sendto@plt>
(gdb) i r eax 0x0 0
eax is zero, dereferencing it leads to a SEGV.
It looks like dnsmasq received a HUP to re-read its config files and
detected a route change shortly after that. It tries to re-send the
last request, and derefences daemon->srv_save->sfd, which was set to
0 while re-reading the config files.
Many thanks, yes, that's an unintended side-effect of the random-port
changes in 2.43. I'll post a fixed version ASAP
Cheers,
Simon.