aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless
diff options
context:
space:
mode:
authorLuis R. Rodriguez <mcgrof@qca.qualcomm.com>2011-11-28 16:47:16 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2011-12-09 08:52:45 -0800
commit7e06614ab127e8c9de4af2e8f9d66953d3e68297 (patch)
tree69d48f58cba994e2adba94c2b427b99e7591d0f0 /net/wireless
parent3ed26be17352133a2dadbc4212a5d23b403b0980 (diff)
downloadkernel_samsung_smdk4412-7e06614ab127e8c9de4af2e8f9d66953d3e68297.zip
kernel_samsung_smdk4412-7e06614ab127e8c9de4af2e8f9d66953d3e68297.tar.gz
kernel_samsung_smdk4412-7e06614ab127e8c9de4af2e8f9d66953d3e68297.tar.bz2
cfg80211: amend regulatory NULL dereference fix
commit 0bac71af6e66dc798bf07d0c0dd14ee5503362f9 upstream. Johannes' patch for "cfg80211: fix regulatory NULL dereference" broke user regulaotry hints and it did not address the fact that last_request was left populated even if the previous regulatory hint was stale due to the wiphy disappearing. Fix user reguluatory hints by only bailing out if for those regulatory hints where a request_wiphy is expected. The stale last_request considerations are addressed through the previous fixes on last_request where we reset the last_request to a static world regdom request upon reset_regdomains(). In this case though we further enhance the effect by simply restoring reguluatory settings completely. Cc: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Luis R. Rodriguez <mcgrof@qca.qualcomm.com> Reviewed-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'net/wireless')
-rw-r--r--net/wireless/reg.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index 0625ada..ca76d8b 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -2040,8 +2040,10 @@ static int __set_regdom(const struct ieee80211_regdomain *rd)
}
request_wiphy = wiphy_idx_to_wiphy(last_request->wiphy_idx);
- if (!request_wiphy) {
- reg_set_request_processed();
+ if (!request_wiphy &&
+ (last_request->initiator == NL80211_REGDOM_SET_BY_DRIVER ||
+ last_request->initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE)) {
+ schedule_delayed_work(&reg_timeout, 0);
return -ENODEV;
}