Commit 772f0389 authored by Ilan Peer's avatar Ilan Peer Committed by Johannes Berg

cfg80211: fix few minor issues in reg_process_hint()

Fix the following issues in reg_process_hint():

1. Add verification that wiphy is valid before processing
   NL80211_REGDOMAIN_SET_BY_COUNTRY_IE.
2. Free the request in case of invalid initiator.
3. Remove WARN_ON check on reg_request->alpha2 as it is not a
   pointer.
Signed-off-by: default avatarIlan Peer <ilan.peer@intel.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 52512072
...@@ -1683,17 +1683,9 @@ static void reg_process_hint(struct regulatory_request *reg_request) ...@@ -1683,17 +1683,9 @@ static void reg_process_hint(struct regulatory_request *reg_request)
struct wiphy *wiphy = NULL; struct wiphy *wiphy = NULL;
enum reg_request_treatment treatment; enum reg_request_treatment treatment;
if (WARN_ON(!reg_request->alpha2))
return;
if (reg_request->wiphy_idx != WIPHY_IDX_INVALID) if (reg_request->wiphy_idx != WIPHY_IDX_INVALID)
wiphy = wiphy_idx_to_wiphy(reg_request->wiphy_idx); wiphy = wiphy_idx_to_wiphy(reg_request->wiphy_idx);
if (reg_request->initiator == NL80211_REGDOM_SET_BY_DRIVER && !wiphy) {
kfree(reg_request);
return;
}
switch (reg_request->initiator) { switch (reg_request->initiator) {
case NL80211_REGDOM_SET_BY_CORE: case NL80211_REGDOM_SET_BY_CORE:
reg_process_hint_core(reg_request); reg_process_hint_core(reg_request);
...@@ -1706,20 +1698,29 @@ static void reg_process_hint(struct regulatory_request *reg_request) ...@@ -1706,20 +1698,29 @@ static void reg_process_hint(struct regulatory_request *reg_request)
schedule_delayed_work(&reg_timeout, msecs_to_jiffies(3142)); schedule_delayed_work(&reg_timeout, msecs_to_jiffies(3142));
return; return;
case NL80211_REGDOM_SET_BY_DRIVER: case NL80211_REGDOM_SET_BY_DRIVER:
if (!wiphy)
goto out_free;
treatment = reg_process_hint_driver(wiphy, reg_request); treatment = reg_process_hint_driver(wiphy, reg_request);
break; break;
case NL80211_REGDOM_SET_BY_COUNTRY_IE: case NL80211_REGDOM_SET_BY_COUNTRY_IE:
if (!wiphy)
goto out_free;
treatment = reg_process_hint_country_ie(wiphy, reg_request); treatment = reg_process_hint_country_ie(wiphy, reg_request);
break; break;
default: default:
WARN(1, "invalid initiator %d\n", reg_request->initiator); WARN(1, "invalid initiator %d\n", reg_request->initiator);
return; goto out_free;
} }
/* This is required so that the orig_* parameters are saved */ /* This is required so that the orig_* parameters are saved */
if (treatment == REG_REQ_ALREADY_SET && wiphy && if (treatment == REG_REQ_ALREADY_SET && wiphy &&
wiphy->regulatory_flags & REGULATORY_STRICT_REG) wiphy->regulatory_flags & REGULATORY_STRICT_REG)
wiphy_update_regulatory(wiphy, reg_request->initiator); wiphy_update_regulatory(wiphy, reg_request->initiator);
return;
out_free:
kfree(reg_request);
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment