From 73f313d035928162f3f26b00d5d613759c26abfc Mon Sep 17 00:00:00 2001
From: Jo-Philipp Wich <jow@openwrt.org>
Date: Fri, 19 Nov 2010 22:02:52 +0000
Subject: hostapd: terminate mainloop if interface setup fails, prevents
 blocking init or /sbin/wifi if an incorrect channel is configured

SVN-Revision: 24041
---
 .../patches/600-terminate_on_setup_failure.patch   | 81 ++++++++++++++++++++++
 1 file changed, 81 insertions(+)
 create mode 100644 package/hostapd/patches/600-terminate_on_setup_failure.patch

(limited to 'package/hostapd/patches')

diff --git a/package/hostapd/patches/600-terminate_on_setup_failure.patch b/package/hostapd/patches/600-terminate_on_setup_failure.patch
new file mode 100644
index 0000000..9a7e889
--- /dev/null
+++ b/package/hostapd/patches/600-terminate_on_setup_failure.patch
@@ -0,0 +1,81 @@
+--- a/src/ap/hostapd.c
++++ b/src/ap/hostapd.c
+@@ -717,11 +717,8 @@ int hostapd_setup_interface_complete(str
+ 	size_t j;
+ 	u8 *prev_addr;
+ 
+-	if (err) {
+-		wpa_printf(MSG_ERROR, "Interface initialization failed");
+-		eloop_terminate();
+-		return -1;
+-	}
++	if (err)
++		goto error;
+ 
+ 	wpa_printf(MSG_DEBUG, "Completing interface initialization");
+ 	if (hapd->iconf->channel) {
+@@ -737,7 +734,7 @@ int hostapd_setup_interface_complete(str
+ 				     hapd->iconf->secondary_channel)) {
+ 			wpa_printf(MSG_ERROR, "Could not set channel for "
+ 				   "kernel driver");
+-			return -1;
++			goto error;
+ 		}
+ 	}
+ 
+@@ -748,7 +745,7 @@ int hostapd_setup_interface_complete(str
+ 			hostapd_logger(hapd, NULL, HOSTAPD_MODULE_IEEE80211,
+ 				       HOSTAPD_LEVEL_WARNING,
+ 				       "Failed to prepare rates table.");
+-			return -1;
++			goto error;
+ 		}
+ 	}
+ 
+@@ -756,14 +753,14 @@ int hostapd_setup_interface_complete(str
+ 	    hostapd_set_rts(hapd, hapd->iconf->rts_threshold)) {
+ 		wpa_printf(MSG_ERROR, "Could not set RTS threshold for "
+ 			   "kernel driver");
+-		return -1;
++		goto error;
+ 	}
+ 
+ 	if (hapd->iconf->fragm_threshold > -1 &&
+ 	    hostapd_set_frag(hapd, hapd->iconf->fragm_threshold)) {
+ 		wpa_printf(MSG_ERROR, "Could not set fragmentation threshold "
+ 			   "for kernel driver");
+-		return -1;
++		goto error;
+ 	}
+ 
+ 	prev_addr = hapd->own_addr;
+@@ -773,7 +770,7 @@ int hostapd_setup_interface_complete(str
+ 		if (j)
+ 			os_memcpy(hapd->own_addr, prev_addr, ETH_ALEN);
+ 		if (hostapd_setup_bss(hapd, j == 0))
+-			return -1;
++			goto error;
+ 		if (hostapd_mac_comp_empty(hapd->conf->bssid) == 0)
+ 			prev_addr = hapd->own_addr;
+ 	}
+@@ -785,7 +782,7 @@ int hostapd_setup_interface_complete(str
+ 	if (hostapd_driver_commit(hapd) < 0) {
+ 		wpa_printf(MSG_ERROR, "%s: Failed to commit driver "
+ 			   "configuration", __func__);
+-		return -1;
++		goto error;
+ 	}
+ 
+ 	wpa_printf(MSG_DEBUG, "%s: Setup of interface done.",
+@@ -795,6 +792,11 @@ int hostapd_setup_interface_complete(str
+ 		iface->init_complete(iface);
+ 
+ 	return 0;
++
++error:
++	wpa_printf(MSG_ERROR, "Interface initialization failed");
++	eloop_terminate();
++	return -1;
+ }
+ 
+ 
-- 
cgit v1.1