aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless/reg.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/wireless/reg.c')
-rw-r--r--net/wireless/reg.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index 9a5411cdf5e8..8d232b904210 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -1552,9 +1552,15 @@ static bool reg_wdev_chan_valid(struct wiphy *wiphy, struct wireless_dev *wdev)
1552 ret = cfg80211_reg_can_beacon(wiphy, 1552 ret = cfg80211_reg_can_beacon(wiphy,
1553 &wdev->chandef, wdev->iftype); 1553 &wdev->chandef, wdev->iftype);
1554 break; 1554 break;
1555 case NL80211_IFTYPE_ADHOC:
1556 if (!wdev->ssid_len)
1557 goto out;
1558
1559 ret = cfg80211_reg_can_beacon(wiphy,
1560 &wdev->chandef, wdev->iftype);
1561 break;
1555 case NL80211_IFTYPE_STATION: 1562 case NL80211_IFTYPE_STATION:
1556 case NL80211_IFTYPE_P2P_CLIENT: 1563 case NL80211_IFTYPE_P2P_CLIENT:
1557 case NL80211_IFTYPE_ADHOC:
1558 if (!wdev->current_bss || 1564 if (!wdev->current_bss ||
1559 !wdev->current_bss->pub.channel) 1565 !wdev->current_bss->pub.channel)
1560 goto out; 1566 goto out;
@@ -1920,7 +1926,7 @@ static enum reg_request_treatment
1920reg_process_hint_driver(struct wiphy *wiphy, 1926reg_process_hint_driver(struct wiphy *wiphy,
1921 struct regulatory_request *driver_request) 1927 struct regulatory_request *driver_request)
1922{ 1928{
1923 const struct ieee80211_regdomain *regd; 1929 const struct ieee80211_regdomain *regd, *tmp;
1924 enum reg_request_treatment treatment; 1930 enum reg_request_treatment treatment;
1925 1931
1926 treatment = __reg_process_hint_driver(driver_request); 1932 treatment = __reg_process_hint_driver(driver_request);
@@ -1940,7 +1946,10 @@ reg_process_hint_driver(struct wiphy *wiphy,
1940 reg_free_request(driver_request); 1946 reg_free_request(driver_request);
1941 return REG_REQ_IGNORE; 1947 return REG_REQ_IGNORE;
1942 } 1948 }
1949
1950 tmp = get_wiphy_regdom(wiphy);
1943 rcu_assign_pointer(wiphy->regd, regd); 1951 rcu_assign_pointer(wiphy->regd, regd);
1952 rcu_free_regdom(tmp);
1944 } 1953 }
1945 1954
1946 1955
@@ -1999,11 +2008,8 @@ __reg_process_hint_country_ie(struct wiphy *wiphy,
1999 return REG_REQ_IGNORE; 2008 return REG_REQ_IGNORE;
2000 return REG_REQ_ALREADY_SET; 2009 return REG_REQ_ALREADY_SET;
2001 } 2010 }
2002 /* 2011
2003 * Two consecutive Country IE hints on the same wiphy. 2012 if (regdom_changes(country_ie_request->alpha2))
2004 * This should be picked up early by the driver/stack
2005 */
2006 if (WARN_ON(regdom_changes(country_ie_request->alpha2)))
2007 return REG_REQ_OK; 2013 return REG_REQ_OK;
2008 return REG_REQ_ALREADY_SET; 2014 return REG_REQ_ALREADY_SET;
2009} 2015}