diff options
author | Sven Neumann <s.neumann@raumfeld.com> | 2011-07-12 09:52:07 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-07-26 16:27:29 -0400 |
commit | a203c2aa4cefccb879c879b8e1cad1a09a679e55 (patch) | |
tree | d57316d29df82b4ae2bf1ea15128bcbea7335d66 /net | |
parent | 276556dbd2d9f56f8933393f927e88fae142ce8f (diff) |
cfg80211: really ignore the regulatory request
At the beginning of wiphy_update_regulatory() a check is performed
whether the request is to be ignored. Then the request is sent to
the driver nevertheless. This happens even if last_request points
to NULL, leading to a crash in the driver:
[<bf01d864>] (lbs_set_11d_domain_info+0x28/0x1e4 [libertas]) from [<c03b714c>] (wiphy_update_regulatory+0x4d0/0x4f4)
[<c03b714c>] (wiphy_update_regulatory+0x4d0/0x4f4) from [<c03b4008>] (wiphy_register+0x354/0x420)
[<c03b4008>] (wiphy_register+0x354/0x420) from [<bf01b17c>] (lbs_cfg_register+0x80/0x164 [libertas])
[<bf01b17c>] (lbs_cfg_register+0x80/0x164 [libertas]) from [<bf020e64>] (lbs_start_card+0x20/0x88 [libertas])
[<bf020e64>] (lbs_start_card+0x20/0x88 [libertas]) from [<bf02cbd8>] (if_sdio_probe+0x898/0x9c0 [libertas_sdio])
Fix this by returning early. Also remove the out: label as it is
not any longer needed.
Signed-off-by: Sven Neumann <s.neumann@raumfeld.com>
Cc: linux-wireless@vger.kernel.org
Cc: Johannes Berg <johannes@sipsolutions.net>
Cc: Daniel Mack <daniel@zonque.org>
Cc: stable@kernel.org
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/wireless/reg.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/wireless/reg.c b/net/wireless/reg.c index 1ad0f39fe091..4453eb721e13 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c | |||
@@ -1125,12 +1125,13 @@ void wiphy_update_regulatory(struct wiphy *wiphy, | |||
1125 | enum ieee80211_band band; | 1125 | enum ieee80211_band band; |
1126 | 1126 | ||
1127 | if (ignore_reg_update(wiphy, initiator)) | 1127 | if (ignore_reg_update(wiphy, initiator)) |
1128 | goto out; | 1128 | return; |
1129 | |||
1129 | for (band = 0; band < IEEE80211_NUM_BANDS; band++) { | 1130 | for (band = 0; band < IEEE80211_NUM_BANDS; band++) { |
1130 | if (wiphy->bands[band]) | 1131 | if (wiphy->bands[band]) |
1131 | handle_band(wiphy, band, initiator); | 1132 | handle_band(wiphy, band, initiator); |
1132 | } | 1133 | } |
1133 | out: | 1134 | |
1134 | reg_process_beacons(wiphy); | 1135 | reg_process_beacons(wiphy); |
1135 | reg_process_ht_flags(wiphy); | 1136 | reg_process_ht_flags(wiphy); |
1136 | if (wiphy->reg_notifier) | 1137 | if (wiphy->reg_notifier) |