From patchwork Sun Jan 19 15:01:04 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthias Schiffer X-Patchwork-Id: 3691 Return-Path: Received-SPF: None (no SPF record) identity=mailfrom; client-ip=37.72.148.22; helo=chaos.universe-factory.net; envelope-from=mschiffer@universe-factory.net; receiver=b.a.t.m.a.n@lists.open-mesh.org X-Greylist: delayed 570 seconds by postgrey-1.34 at open-mesh.org; Sun, 19 Jan 2014 16:10:42 CET Received: from chaos.universe-factory.net (chaos.universe-factory.net [37.72.148.22]) by open-mesh.org (Postfix) with ESMTP id BA2A2602379 for ; Sun, 19 Jan 2014 16:10:42 +0100 (CET) Received: from avalon.meute.ffhl (i5E860C99.versanet.de [94.134.12.153]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits)) (No client certificate requested) by chaos.universe-factory.net (Postfix) with ESMTPSA id 46DA4187CAE for ; Sun, 19 Jan 2014 16:01:11 +0100 (CET) From: Matthias Schiffer To: b.a.t.m.a.n@lists.open-mesh.org Date: Sun, 19 Jan 2014 16:01:04 +0100 Message-Id: X-Mailer: git-send-email 1.8.5.3 Subject: [B.A.T.M.A.N.] [PATCH] batadv-vis: don't leak socket fd in get_if_mac() X-BeenThere: b.a.t.m.a.n@lists.open-mesh.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: The list for a Better Approach To Mobile Ad-hoc Networking List-Id: The list for a Better Approach To Mobile Ad-hoc Networking List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 19 Jan 2014 15:10:43 -0000 Leaking an fd every time get_if_mac() is called causes a batadv-vis server process to hit the open file limit in a matter of hours when it is as low as 1024 (which it is on OpenWRT). Reported-by: Jan-Philipp Litza Signed-off-by: Matthias Schiffer --- vis/vis.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/vis/vis.c b/vis/vis.c index dcb4db4..7a8e780 100644 --- a/vis/vis.c +++ b/vis/vis.c @@ -96,7 +96,7 @@ static uint8_t *str_to_mac(char *str) static int get_if_mac(char *ifname, uint8_t *mac) { struct ifreq ifr; - int sock; + int sock, ret; strncpy(ifr.ifr_name, ifname, IFNAMSIZ); @@ -105,7 +105,11 @@ static int get_if_mac(char *ifname, uint8_t *mac) return -1; } - if (ioctl(sock, SIOCGIFHWADDR, &ifr) == -1) { + ret = ioctl(sock, SIOCGIFHWADDR, &ifr); + + close(sock); + + if (ret == -1) { fprintf(stderr, "can't get MAC address: %s\n", strerror(errno)); return -1; }