Parcourir la source

packages/routing: alfred: fix socket fd leak

Matthias Schiffer il y a 10 ans
Parent
commit
c3ddb2216f
1 fichiers modifiés avec 49 ajouts et 0 suppressions
  1. 49 0
      patches/packages/routing/0002-alfred-fix-socket-fd-leak.patch

+ 49 - 0
patches/packages/routing/0002-alfred-fix-socket-fd-leak.patch

@@ -0,0 +1,49 @@
+From: Matthias Schiffer <mschiffer@universe-factory.net>
+Date: Sat, 18 Jan 2014 21:15:16 +0100
+Subject: alfred: fix socket fd leak
+
+diff --git a/alfred/patches/0002-batadv-vis-don-t-leak-socket-fd-in-get_if_mac.patch b/alfred/patches/0002-batadv-vis-don-t-leak-socket-fd-in-get_if_mac.patch
+new file mode 100644
+index 0000000..2374e25
+--- /dev/null
++++ b/alfred/patches/0002-batadv-vis-don-t-leak-socket-fd-in-get_if_mac.patch
+@@ -0,0 +1,39 @@
++From 449b94ee85a42fbabec550d920002ad07738e733 Mon Sep 17 00:00:00 2001
++Message-Id: <449b94ee85a42fbabec550d920002ad07738e733.1390075976.git.mschiffer@universe-factory.net>
++From: Matthias Schiffer <mschiffer@universe-factory.net>
++Date: Sat, 18 Jan 2014 21:04:05 +0100
++Subject: [PATCH] batadv-vis: don't leak socket fd in get_if_mac()
++
++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 there are many
++active interfaces and the limit is as low as 1024 (which it is on OpenWRT).
++
++Reported-by: Jan-Philipp Litza <janphilipp@litza.de>
++Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
++---
++ vis/vis.c | 7 ++++++-
++ 1 file changed, 6 insertions(+), 1 deletion(-)
++
++--- a/vis/vis.c
+++++ b/vis/vis.c
++@@ -97,6 +97,7 @@ static int get_if_mac(char *ifname, uint
++ {
++ 	struct ifreq ifr;
++ 	int sock;
+++	int ret;
++ 
++ 	strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
++ 
++@@ -105,7 +106,11 @@ static int get_if_mac(char *ifname, uint
++ 		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;
++ 	}