[backfire] backport r24041
[openwrt-10.03/.git] / package / hostapd / patches / 600-terminate_on_setup_failure.patch
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..9385413
--- /dev/null
@@ -0,0 +1,81 @@
+--- a/src/ap/hostapd.c
++++ b/src/ap/hostapd.c
+@@ -706,11 +706,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) {
+@@ -726,7 +723,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;
+               }
+       }
+@@ -736,7 +733,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;
+               }
+       }
+@@ -744,14 +741,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;
+@@ -761,7 +758,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;
+       }
+@@ -773,7 +770,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.",
+@@ -783,6 +780,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;
+ }