bgscan_learn: Prevent infinite busy looping

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>
This commit is contained in:
Pawel Kulakowski 2012-11-11 16:26:36 +02:00 committed by Jouni Malinen
parent 99276998fa
commit 548f100384

View 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]);