diff --git a/src/dnsmasq.c b/src/dnsmasq.c index 0908858..9ac5217 100644 --- a/src/dnsmasq.c +++ b/src/dnsmasq.c @@ -127,6 +127,7 @@ int main (int argc, char **argv) This might be increased is EDNS packet size if greater than the minimum. */ daemon->packet_buff_sz = daemon->edns_pktsz + MAXDNAME + RRFIXEDSZ; daemon->packet = safe_malloc(daemon->packet_buff_sz); + daemon->pipe_to_parent = -1; if (option_bool(OPT_EXTRALOG)) daemon->addrbuff2 = safe_malloc(ADDRSTRLEN); @@ -1080,8 +1081,6 @@ int main (int argc, char **argv) pid = getpid(); - daemon->pipe_to_parent = -1; - #ifdef HAVE_INOTIFY /* Using inotify, have to select a resolv file at startup */ poll_resolv(1, 0, now); diff --git a/src/netlink.c b/src/netlink.c index 4c8e983..389325e 100644 --- a/src/netlink.c +++ b/src/netlink.c @@ -165,6 +165,13 @@ int iface_enumerate(int family, void *parm, callback_t callback) struct rtgenmsg g; } req; + /* The netlink socket is not available in child processes. */ + if (daemon->pipe_to_parent != -1) + { + my_syslog(LOG_ERR, _("BUG: called iface_enumerate() in child process")); + return 0; + } + memset(&req, 0, sizeof(req)); memset(&addr, 0, sizeof(addr));