2011-09-15 12:02:25

by Rajkumar Manoharan

[permalink] [raw]
Subject: [RFC] wireless: Do not allow disabled channel in scan request

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.

Signed-off-by: Rajkumar Manoharan <[email protected]>
---
net/wireless/sme.c | 19 ++++++++++++-------
1 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/net/wireless/sme.c b/net/wireless/sme.c
index dec0fa2..6e86d5a 100644
--- a/net/wireless/sme.c
+++ b/net/wireless/sme.c
@@ -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];
--
1.7.6.1



2011-09-15 12:08:11

by Rajkumar Manoharan

[permalink] [raw]
Subject: Re: [RFC] wireless: Do not allow disabled channel in scan request

On Thu, Sep 15, 2011 at 02:05:06PM +0200, Johannes Berg wrote:
> On Thu, 2011-09-15 at 17:33 +0530, Rajkumar Manoharan wrote:
> > 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 <[email protected]>
>
> Good catch. We should probably refactor this later to go through a
> single point...
>
True. Thanks for the review

--
Rajkumar

2011-09-15 12:05:08

by Johannes Berg

[permalink] [raw]
Subject: Re: [RFC] wireless: Do not allow disabled channel in scan request

On Thu, 2011-09-15 at 17:33 +0530, Rajkumar Manoharan wrote:
> 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 <[email protected]>

Good catch. We should probably refactor this later to go through a
single point...

johannes

> Signed-off-by: Rajkumar Manoharan <[email protected]>
> ---
> net/wireless/sme.c | 19 ++++++++++++-------
> 1 files changed, 12 insertions(+), 7 deletions(-)
>
> diff --git a/net/wireless/sme.c b/net/wireless/sme.c
> index dec0fa2..6e86d5a 100644
> --- a/net/wireless/sme.c
> +++ b/net/wireless/sme.c
> @@ -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];