From 548f100384137562535bc47a010ea2cab07e3da7 Mon Sep 17 00:00:00 2001 From: Pawel Kulakowski Date: Sun, 11 Nov 2012 16:26:36 +0200 Subject: [PATCH] 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 --- wpa_supplicant/bgscan_learn.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/wpa_supplicant/bgscan_learn.c b/wpa_supplicant/bgscan_learn.c index adf82d871..07d31e4cb 100644 --- a/wpa_supplicant/bgscan_learn.c +++ b/wpa_supplicant/bgscan_learn.c @@ -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]);