Log error if we try and use netlink in a child process.

Child processes to handle TCP connections don't
have an open netlink socket. If they call
iface_enumerate() that's a bug.
This commit is contained in:
Simon Kelley
2025-12-01 09:41:30 +00:00
parent 959dead673
commit cef74423e2
2 changed files with 8 additions and 2 deletions

View File

@@ -127,6 +127,7 @@ int main (int argc, char **argv)
This might be increased is EDNS packet size if greater than the minimum. */ This might be increased is EDNS packet size if greater than the minimum. */
daemon->packet_buff_sz = daemon->edns_pktsz + MAXDNAME + RRFIXEDSZ; daemon->packet_buff_sz = daemon->edns_pktsz + MAXDNAME + RRFIXEDSZ;
daemon->packet = safe_malloc(daemon->packet_buff_sz); daemon->packet = safe_malloc(daemon->packet_buff_sz);
daemon->pipe_to_parent = -1;
if (option_bool(OPT_EXTRALOG)) if (option_bool(OPT_EXTRALOG))
daemon->addrbuff2 = safe_malloc(ADDRSTRLEN); daemon->addrbuff2 = safe_malloc(ADDRSTRLEN);
@@ -1080,8 +1081,6 @@ int main (int argc, char **argv)
pid = getpid(); pid = getpid();
daemon->pipe_to_parent = -1;
#ifdef HAVE_INOTIFY #ifdef HAVE_INOTIFY
/* Using inotify, have to select a resolv file at startup */ /* Using inotify, have to select a resolv file at startup */
poll_resolv(1, 0, now); poll_resolv(1, 0, now);

View File

@@ -165,6 +165,13 @@ int iface_enumerate(int family, void *parm, callback_t callback)
struct rtgenmsg g; struct rtgenmsg g;
} req; } 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(&req, 0, sizeof(req));
memset(&addr, 0, sizeof(addr)); memset(&addr, 0, sizeof(addr));