diff options
Diffstat (limited to 'net/wireless/reg.c')
-rw-r--r-- | net/wireless/reg.c | 20 |
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 | |||
1920 | reg_process_hint_driver(struct wiphy *wiphy, | 1926 | reg_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 | } |