bgscan_learn: Prevent infinite busy looping
authorPawel Kulakowski <pawel.kulakowski@tieto.com>
Sun, 11 Nov 2012 14:26:36 +0000 (16:26 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 11 Nov 2012 14:26:36 +0000 (16:26 +0200)
In highly congested network (BSSes almost on every channel
within ESS) we have hit a bug when wpa_supplicant become
completly irresponsive, infinite looping on while loop.

When probe_idx was equal 0 and we are not able to probe
new frequency, following condition were never fulfilled:
"if (!in_array(freqs, data->supp_freqs[idx]))"

Signed-hostap: Pawel Kulakowski <pawel.kulakowski@tieto.com>

wpa_supplicant/bgscan_learn.c

index adf82d8..07d31e4 100644 (file)
@@ -242,8 +242,11 @@ static int * bgscan_learn_get_probe_freq(struct bgscan_learn_data *data,
 
        idx = data->probe_idx + 1;
        while (idx != data->probe_idx) {
-               if (data->supp_freqs[idx] == 0)
+               if (data->supp_freqs[idx] == 0) {
+                       if (data->probe_idx == 0)
+                               break;
                        idx = 0;
+               }
                if (!in_array(freqs, data->supp_freqs[idx])) {
                        wpa_printf(MSG_DEBUG, "bgscan learn: Probe new freq "
                                   "%u", data->supp_freqs[idx]);