From 46b066565e534c4c4770d6391ca258531c4b1016 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 4 Feb 2013 21:47:59 +0000 Subject: [PATCH] Don't leak sockets when getsockname fails. --- src/dnsmasq.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/dnsmasq.c b/src/dnsmasq.c index 2ab1bda..00551a1 100644 --- a/src/dnsmasq.c +++ b/src/dnsmasq.c @@ -1345,10 +1345,15 @@ static void check_dns_listeners(fd_set *set, time_t now) while ((confd = accept(listener->tcpfd, NULL, NULL)) == -1 && errno == EINTR); - if (confd == -1 || - getsockname(confd, (struct sockaddr *)&tcp_addr, &tcp_len) == -1) + if (confd == -1) continue; + if (getsockname(confd, (struct sockaddr *)&tcp_addr, &tcp_len) == -1) + { + close(confd); + continue; + } + if (option_bool(OPT_NOWILD)) iface = listener->iface; /* May be NULL */ else