]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Revert "mesh: Apply channel attributes before setup interface"
authorMasashi Honma <masashi.honma@gmail.com>
Tue, 15 Jan 2019 11:43:41 +0000 (20:43 +0900)
committerJouni Malinen <j@w1.fi>
Mon, 21 Jan 2019 21:43:12 +0000 (23:43 +0200)
This reverts commit 2564184440d9d6041d11a8c7d50b31368634c3bd.

Commit 2564184440d9 ("mesh: Apply channel attributes before setup
interface") triggers some channel configurations to result in leaking
memory. This seems to be caused by hapd->started not getting set when
going through a callback to start hostapd operation (e.g., when using
HT40 coex scan) due to hostapd_setup_bss() not getting called. This
results in hostapd_free_hapd_data() not clearing allocated
hapd->wpa_auth. This can be reproduced with the hwsim test case
mesh_secure_ocv_mix_legacy.

A more complete cleanup of the pending mesh patch for DFS support seems
to be needed to fix this properly, so the best approach for now is to
revert this patch and bring it back once rest of the mesh changes are
ready to be applied.

Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
wpa_supplicant/mesh.c

index dd6aad6f0c1789f883419c7b5096221ec1c02e0a..e9457f0440f3c7cb1c09530cf427afeb3554ebf9 100644 (file)
@@ -251,7 +251,7 @@ static int wpa_supplicant_mesh_init(struct wpa_supplicant *wpa_s,
        struct mesh_conf *mconf;
        int basic_rates_erp[] = { 10, 20, 55, 60, 110, 120, 240, -1 };
        int rate_len;
-       int frequency, saved_freq;
+       int frequency;
 
        if (!wpa_s->conf->user_mpm) {
                /* not much for us to do here */
@@ -383,13 +383,6 @@ static int wpa_supplicant_mesh_init(struct wpa_supplicant *wpa_s,
                conf->basic_rates[rate_len] = -1;
        }
 
-       /* Handle pri/sec switch frequency within AP configuration parameter
-        * generation without changing the stored network profile in the end. */
-       saved_freq = ssid->frequency;
-       ssid->frequency = frequency;
-       wpa_supplicant_conf_ap_ht(wpa_s, ssid, conf);
-       ssid->frequency = saved_freq;
-
        if (wpa_drv_init_mesh(wpa_s)) {
                wpa_msg(wpa_s, MSG_ERROR, "Failed to init mesh in driver");
                return -1;
@@ -401,6 +394,8 @@ static int wpa_supplicant_mesh_init(struct wpa_supplicant *wpa_s,
                return -1;
        }
 
+       wpa_supplicant_conf_ap_ht(wpa_s, ssid, conf);
+
        return 0;
 out_free:
        wpa_supplicant_mesh_deinit(wpa_s);