| From: Johannes Berg <johannes.berg@intel.com> |
| Date: Tue, 16 Apr 2013 14:32:26 +0200 |
| Subject: wireless: regulatory: fix channel disabling race condition |
| |
| commit 990de49f74e772b6db5208457b7aa712a5f4db86 upstream. |
| |
| When a full scan 2.4 and 5 GHz scan is scheduled, but then the 2.4 GHz |
| part of the scan disables a 5.2 GHz channel due to, e.g. receiving |
| country or frequency information, that 5.2 GHz channel might already |
| be in the list of channels to scan next. Then, when the driver checks |
| if it should do a passive scan, that will return false and attempt an |
| active scan. This is not only wrong but can also lead to the iwlwifi |
| device firmware crashing since it checks regulatory as well. |
| |
| Fix this by not setting the channel flags to just disabled but rather |
| OR'ing in the disabled flag. That way, even if the race happens, the |
| channel will be scanned passively which is still (mostly) correct. |
| |
| Signed-off-by: Johannes Berg <johannes.berg@intel.com> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| net/wireless/reg.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/net/wireless/reg.c |
| +++ b/net/wireless/reg.c |
| @@ -853,7 +853,7 @@ static void handle_channel(struct wiphy |
| return; |
| |
| REG_DBG_PRINT("Disabling freq %d MHz\n", chan->center_freq); |
| - chan->flags = IEEE80211_CHAN_DISABLED; |
| + chan->flags |= IEEE80211_CHAN_DISABLED; |
| return; |
| } |
| |