Fix crash after re-reading an empty resolv.conf file.

If dnsmasq re-reads a resolv file, and it's empty, it will
retry after a delay. In the meantime, the old servers from the
resolv file have been deleted, but the servers_array doesn't
get updated, leading to dangling pointers and crashes.

Thanks to Brad Jorsch for finding and analysing this bug.

This problem was introduced in 2.86.
This commit is contained in:
Simon Kelley
2021-10-06 22:31:06 +01:00
parent d2ad5dc073
commit d290630d31

View File

@@ -1682,6 +1682,11 @@ static void poll_resolv(int force, int do_reload, time_t now)
} }
else else
{ {
/* If we're delaying things, we don't call check_servers(), but
reload_servers() may have deleted some servers, rendering the server_array
invalid, so just rebuild that here. Once reload_servers() succeeds,
we call check_servers() above, which calls build_server_array itself. */
build_server_array();
latest->mtime = 0; latest->mtime = 0;
if (!warned) if (!warned)
{ {