From 3d5422c8736782e32ff63929737d1ee62679bb8e Mon Sep 17 00:00:00 2001 From: Mihir Shete Date: Thu, 27 Mar 2014 13:04:15 +0530 Subject: [PATCH] cfg80211: unblock user hint when cfg80211_regdom is intersected If the driver is loaded when cfg80211_regdom is intersected then user hint will fail for the first time since cfg80211 does not have a check to see if cfg80211_regdom is intersected. Add a check to see if cf80211_regdom is intersected and allow the user hint to be processed. Change-Id: Iba9cdd32470e29d35d3bb35012eb404b7c78d601 CRs-Fixed: 639538 Signed-off-by: Mihir Shete --- net/wireless/reg.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/net/wireless/reg.c b/net/wireless/reg.c index 197223277901..2fed05f2edf8 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c @@ -425,6 +425,11 @@ static bool is_user_regdom_saved(void) return true; } +static bool is_cfg80211_regdom_intersected(void) +{ + return is_intersected_alpha2(get_cfg80211_regdom()->alpha2); +} + static const struct ieee80211_regdomain * reg_copy_regd(const struct ieee80211_regdomain *src_regd) { @@ -1977,9 +1982,14 @@ __reg_process_hint_user(struct regulatory_request *user_request) */ if ((lr->initiator == NL80211_REGDOM_SET_BY_CORE || lr->initiator == NL80211_REGDOM_SET_BY_DRIVER || - lr->initiator == NL80211_REGDOM_SET_BY_USER) && - regdom_changes(lr->alpha2)) - return REG_REQ_IGNORE; + lr->initiator == NL80211_REGDOM_SET_BY_USER)) { + if (lr->intersect) { + if (!is_cfg80211_regdom_intersected()) + return REG_REQ_IGNORE; + } else if (regdom_changes(lr->alpha2)) { + return REG_REQ_IGNORE; + } + } if (!regdom_changes(user_request->alpha2)) return REG_REQ_ALREADY_SET;