Currently, self managed drivers cannot update the global regulatory using a regulatory hint from driver if the wiphy regd is already set from other sources. Due to this, when a regulatory hint is provided to cfg80211 from self managed devices, the request gets ignored and global reg is always at default, i.e World reg, DFS-UNSET. Hence in such systems, the result of 'iw reg get' does not indicate a valid global regd. Hence, Allow setting the cfg80211 global regulatory when it is unset and the requestor is a self managed device. At the same time, do not propagate these hints to other devices in the system. Signed-off-by: Sriram R <srirrama@xxxxxxxxxxxxxx> --- net/wireless/reg.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/net/wireless/reg.c b/net/wireless/reg.c index 646107a..86c4460 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c @@ -3550,6 +3550,20 @@ static int reg_set_rd_driver(const struct ieee80211_regdomain *rd, if (!request_wiphy) return -ENODEV; + /* Update cfg80211 regdomain only if it's unset, in case a hint + * is received from self managed wiphy. Ignore all other + * processing from self managed wiphy's. Return EALREADY to avoid + * updating other drivers. + */ + if (request_wiphy->regulatory_flags & REGULATORY_WIPHY_SELF_MANAGED) { + regd = get_cfg80211_regdom(); + + if (regd == cfg80211_world_regdom) { + reset_regdomains(false, rd); + } + return -EALREADY; + } + if (!driver_request->intersect) { if (request_wiphy->regd) return -EALREADY; -- 2.7.4