wireless: Do not allow disabled channel in scan request
authorRajkumar Manoharan <rmanohar@qca.qualcomm.com>
Thu, 15 Sep 2011 12:10:50 +0000 (17:40 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 20 Sep 2011 18:43:48 +0000 (14:43 -0400)
cfg80211_conn_scan allows disabled channels at scan request.
Hence probe request was seen at the disabled one. This patch
ensures that disabled channel never be added into the scan
request's channel list.

Acked-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/wireless/sme.c

index dec0fa28372e5f5363d79d0ba912cf1e37704dd9..6e86d5acf145bef1d7ba2e842fd61f1b50610c69 100644 (file)
@@ -110,17 +110,22 @@ static int cfg80211_conn_scan(struct wireless_dev *wdev)
        else {
                int i = 0, j;
                enum ieee80211_band band;
+               struct ieee80211_supported_band *bands;
+               struct ieee80211_channel *channel;
 
                for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
-                       if (!wdev->wiphy->bands[band])
+                       bands = wdev->wiphy->bands[band];
+                       if (!bands)
                                continue;
-                       for (j = 0; j < wdev->wiphy->bands[band]->n_channels;
-                            i++, j++)
-                               request->channels[i] =
-                                       &wdev->wiphy->bands[band]->channels[j];
-                       request->rates[band] =
-                               (1 << wdev->wiphy->bands[band]->n_bitrates) - 1;
+                       for (j = 0; j < bands->n_channels; j++) {
+                               channel = &bands->channels[j];
+                               if (channel->flags & IEEE80211_CHAN_DISABLED)
+                                       continue;
+                               request->channels[i++] = channel;
+                       }
+                       request->rates[band] = (1 << bands->n_bitrates) - 1;
                }
+               n_channels = i;
        }
        request->n_channels = n_channels;
        request->ssids = (void *)&request->channels[n_channels];