mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Fix logic error in Linux netlink code.
This could cause dnsmasq to enter a tight loop on systems with a very large number of network interfaces.
This commit is contained in:
committed by
Simon Kelley
parent
591ed1e905
commit
1d07667ac7
@@ -11,6 +11,12 @@ version 2.77
|
||||
Thanks to Mozilla for funding the security audit
|
||||
which spotted this bug.
|
||||
|
||||
Fix logic error in Linux netlink code. This could
|
||||
cause dnsmasq to enter a tight loop on systems
|
||||
with a very large number of network interfaces.
|
||||
Thanks to Ivan Kokshaysky for the diagnosis and
|
||||
patch.
|
||||
|
||||
|
||||
version 2.76
|
||||
Include 0.0.0.0/8 in DNS rebind checks. This range
|
||||
|
||||
@@ -188,11 +188,17 @@ int iface_enumerate(int family, void *parm, int (*callback)())
|
||||
}
|
||||
|
||||
for (h = (struct nlmsghdr *)iov.iov_base; NLMSG_OK(h, (size_t)len); h = NLMSG_NEXT(h, len))
|
||||
if (h->nlmsg_seq != seq || h->nlmsg_pid != netlink_pid || h->nlmsg_type == NLMSG_ERROR)
|
||||
if (h->nlmsg_pid != netlink_pid || h->nlmsg_type == NLMSG_ERROR)
|
||||
{
|
||||
/* May be multicast arriving async */
|
||||
nl_async(h);
|
||||
}
|
||||
else if (h->nlmsg_seq != seq)
|
||||
{
|
||||
/* May be part of incomplete response to previous request after
|
||||
ENOBUFS. Drop it. */
|
||||
continue;
|
||||
}
|
||||
else if (h->nlmsg_type == NLMSG_DONE)
|
||||
return callback_ok;
|
||||
else if (h->nlmsg_type == RTM_NEWADDR && family != AF_UNSPEC && family != AF_LOCAL)
|
||||
|
||||
Reference in New Issue
Block a user