Skip to content

Commit

Permalink
cfg80211: fix scan crash on single-band cards
Browse files Browse the repository at this point in the history
commit 58389c69150e6032504dfcd3edca6b1975c8b5bc
Author: Johannes Berg <[email protected]>
Date:   Mon Jul 18 18:08:35 2011 +0200

     cfg80211: allow userspace to control supported rates in scan

made single-band cards crash since it would always
access all wiphy->bands[]. Fix this and reject any
attempts in the new helper ieee80211_get_ratemask()
to do the same, rejecting rates configuration for
unsupported bands.

Reported-by: Pavel Roskin <[email protected]>
Tested-by: Pavel Roskin <[email protected]>
Signed-off-by: Johannes Berg <[email protected]>
Signed-off-by: John W. Linville <[email protected]>
  • Loading branch information
jmberg-intel authored and linvjw committed Jul 20, 2011
1 parent 70126f6 commit a401d2b
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 2 deletions.
4 changes: 3 additions & 1 deletion net/wireless/nl80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -3454,7 +3454,9 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
}

for (i = 0; i < IEEE80211_NUM_BANDS; i++)
request->rates[i] = (1 << wiphy->bands[i]->n_bitrates) - 1;
if (wiphy->bands[i])
request->rates[i] =
(1 << wiphy->bands[i]->n_bitrates) - 1;

if (info->attrs[NL80211_ATTR_SCAN_SUPP_RATES]) {
nla_for_each_nested(attr,
Expand Down
3 changes: 2 additions & 1 deletion net/wireless/scan.c
Original file line number Diff line number Diff line change
Expand Up @@ -863,7 +863,8 @@ int cfg80211_wext_siwscan(struct net_device *dev,
}

for (i = 0; i < IEEE80211_NUM_BANDS; i++)
creq->rates[i] = (1 << wiphy->bands[i]->n_bitrates) - 1;
if (wiphy->bands[i])
creq->rates[i] = (1 << wiphy->bands[i]->n_bitrates) - 1;

rdev->scan_req = creq;
err = rdev->ops->scan(wiphy, dev, creq);
Expand Down
3 changes: 3 additions & 0 deletions net/wireless/util.c
Original file line number Diff line number Diff line change
Expand Up @@ -1013,6 +1013,9 @@ int ieee80211_get_ratemask(struct ieee80211_supported_band *sband,
{
int i, j;

if (!sband)
return -EINVAL;

if (n_rates == 0 || n_rates > NL80211_MAX_SUPP_RATES)
return -EINVAL;

Expand Down

0 comments on commit a401d2b

Please sign in to comment.