summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2010-11-19 22:02:52 +0000
committerJo-Philipp Wich <jow@openwrt.org>2010-11-19 22:02:52 +0000
commit73f313d035928162f3f26b00d5d613759c26abfc (patch)
tree378c20816310b7ff72b270a441741e689802ea5f
parent049e59a27be91dc9731f53b4868795adde682fd4 (diff)
downloadmaster-31e0f0ae-73f313d035928162f3f26b00d5d613759c26abfc.tar.gz
master-31e0f0ae-73f313d035928162f3f26b00d5d613759c26abfc.tar.bz2
master-31e0f0ae-73f313d035928162f3f26b00d5d613759c26abfc.zip
hostapd: terminate mainloop if interface setup fails, prevents blocking init or /sbin/wifi if an incorrect channel is configured
SVN-Revision: 24041
-rw-r--r--package/hostapd/patches/600-terminate_on_setup_failure.patch81
1 files changed, 81 insertions, 0 deletions
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 0000000000..9a7e889ebf
--- /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;
+ }
+
+