aboutsummaryrefslogtreecommitdiffstats
path: root/src/wps
diff options
context:
space:
mode:
authorJouni Malinen <j@w1.fi>2012-07-07 13:01:45 +0300
committerJouni Malinen <j@w1.fi>2012-07-07 13:01:45 +0300
commita5ed45586c63ffd8f9d2b44e27c251d7bacbeaf4 (patch)
treee1172cf85a9d888a076dd33118bfc86bcbfa73f3 /src/wps
parent19991e5fb29a7f0701024e4e7ddd03b7c7b59619 (diff)
downloadexternal_wpa_supplicant_8_ti-a5ed45586c63ffd8f9d2b44e27c251d7bacbeaf4.zip
external_wpa_supplicant_8_ti-a5ed45586c63ffd8f9d2b44e27c251d7bacbeaf4.tar.gz
external_wpa_supplicant_8_ti-a5ed45586c63ffd8f9d2b44e27c251d7bacbeaf4.tar.bz2
WPS SSDP: Fix socket leaks on error paths
Signed-hostap: Jouni Malinen <j@w1.fi>
Diffstat (limited to 'src/wps')
-rw-r--r--src/wps/wps_upnp_ssdp.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/wps/wps_upnp_ssdp.c b/src/wps/wps_upnp_ssdp.c
index 4c4aebf..17a8207 100644
--- a/src/wps/wps_upnp_ssdp.c
+++ b/src/wps/wps_upnp_ssdp.c
@@ -866,20 +866,24 @@ int ssdp_open_multicast_sock(u32 ip_addr)
return -1;
#if 0 /* maybe ok if we sometimes block on writes */
- if (fcntl(sd, F_SETFL, O_NONBLOCK) != 0)
+ if (fcntl(sd, F_SETFL, O_NONBLOCK) != 0) {
+ close(sd);
return -1;
+ }
#endif
if (setsockopt(sd, IPPROTO_IP, IP_MULTICAST_IF,
&ip_addr, sizeof(ip_addr))) {
wpa_printf(MSG_DEBUG, "WPS: setsockopt(IP_MULTICAST_IF) %x: "
"%d (%s)", ip_addr, errno, strerror(errno));
+ close(sd);
return -1;
}
if (setsockopt(sd, IPPROTO_IP, IP_MULTICAST_TTL,
&ttl, sizeof(ttl))) {
wpa_printf(MSG_DEBUG, "WPS: setsockopt(IP_MULTICAST_TTL): "
"%d (%s)", errno, strerror(errno));
+ close(sd);
return -1;
}
@@ -898,6 +902,7 @@ int ssdp_open_multicast_sock(u32 ip_addr)
"WPS UPnP: setsockopt "
"IP_ADD_MEMBERSHIP errno %d (%s)",
errno, strerror(errno));
+ close(sd);
return -1;
}
}