hostapd: fix goto loop for ubus assoc handler
authorDavid Bauer <mail@david-bauer.net>
Sun, 17 Oct 2021 21:29:57 +0000 (23:29 +0200)
committerDavid Bauer <mail@david-bauer.net>
Tue, 19 Oct 2021 15:27:05 +0000 (17:27 +0200)
When a ubus event handler denies a association with a non-zero return
value, the code jumps to preceeding code, creating an endless loop until
the event handler accepts the assc request.

Move the ubus handler further up the code to avoid creating such a loop.

Signed-off-by: David Bauer <mail@david-bauer.net>
package/network/services/hostapd/patches/600-ubus_support.patch

index d77d245243b6c2dd6dc56999cb0eacd5becb72e3..7bb998dbb8d84dad666f0f2d5c2d1e2dc04e3dc9 100644 (file)
  
        /* followed by SSID and Supported rates; and HT capabilities if 802.11n
         * is used */
-@@ -5831,6 +5848,14 @@ static void handle_assoc(struct hostapd_
-                                           pos, left, rssi, omit_rsnxe);
-       os_free(tmp);
+@@ -5765,6 +5782,13 @@ static void handle_assoc(struct hostapd_
+       }
+ #endif /* CONFIG_FILS */
  
 +      ubus_resp = hostapd_ubus_handle_event(hapd, &req);
 +      if (ubus_resp) {
 +              resp = ubus_resp > 0 ? (u16) ubus_resp : WLAN_STATUS_UNSPECIFIED_FAILURE;
 +              goto fail;
 +      }
-+
+  fail:
        /*
-        * Remove the station in case transmission of a success response fails
-        * (the STA was added associated to the driver) or if the station was
-@@ -5858,6 +5883,7 @@ static void handle_disassoc(struct hosta
+@@ -5858,6 +5882,7 @@ static void handle_disassoc(struct hosta
        wpa_printf(MSG_DEBUG, "disassocation: STA=" MACSTR " reason_code=%d",
                   MAC2STR(mgmt->sa),
                   le_to_host16(mgmt->u.disassoc.reason_code));
  
        sta = ap_get_sta(hapd, mgmt->sa);
        if (sta == NULL) {
-@@ -5927,6 +5953,8 @@ static void handle_deauth(struct hostapd
+@@ -5927,6 +5952,8 @@ static void handle_deauth(struct hostapd
        /* Clear the PTKSA cache entries for PASN */
        ptksa_cache_flush(hapd->ptksa, mgmt->sa, WPA_CIPHER_NONE);