hostapd: terminate mainloop if interface setup fails, prevents blocking init or ...
authorJo-Philipp Wich <jow@openwrt.org>
Fri, 19 Nov 2010 22:02:52 +0000 (22:02 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Fri, 19 Nov 2010 22:02:52 +0000 (22:02 +0000)
SVN-Revision: 24041

package/hostapd/patches/600-terminate_on_setup_failure.patch [new file with mode: 0644]

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 (file)
index 0000000..9a7e889
--- /dev/null
@@ -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;
+ }