--- a/drivers/net/wireless/ath/regd.c
+++ b/drivers/net/wireless/ath/regd.c
-@@ -341,6 +341,10 @@ ath_reg_apply_beaconing_flags(struct wip
+@@ -24,6 +24,7 @@
+ #include "regd_common.h"
+
+ static int __ath_regd_init(struct ath_regulatory *reg);
++static struct reg_dmn_pair_mapping *ath_get_regpair(int regdmn);
+
+ /*
+ * This is a set of common rules used by our world regulatory domains.
+@@ -116,6 +117,9 @@ static const struct ieee80211_regdomain
+
+ static bool dynamic_country_user_possible(struct ath_regulatory *reg)
+ {
++ if (IS_ENABLED(CPTCFG_ATH_USER_REGD))
++ return true;
++
+ if (IS_ENABLED(CPTCFG_ATH_REG_DYNAMIC_USER_CERT_TESTING))
+ return true;
+
+@@ -188,6 +192,8 @@ static bool dynamic_country_user_possibl
+
+ static bool ath_reg_dyn_country_user_allow(struct ath_regulatory *reg)
+ {
++ if (IS_ENABLED(CPTCFG_ATH_USER_REGD))
++ return true;
+ if (!IS_ENABLED(CPTCFG_ATH_REG_DYNAMIC_USER_REG_HINTS))
+ return false;
+ if (!dynamic_country_user_possible(reg))
+@@ -345,6 +351,9 @@ ath_reg_apply_beaconing_flags(struct wip
struct ieee80211_channel *ch;
unsigned int i;
-+#ifdef CPTCFG_ATH_USER_REGD
-+ return;
-+#endif
++ if (IS_ENABLED(CPTCFG_ATH_USER_REGD))
++ return;
+
for (band = 0; band < NUM_NL80211_BANDS; band++) {
if (!wiphy->bands[band])
continue;
-@@ -374,6 +378,10 @@ ath_reg_apply_ir_flags(struct wiphy *wip
+@@ -378,6 +387,9 @@ ath_reg_apply_ir_flags(struct wiphy *wip
{
struct ieee80211_supported_band *sband;
-+#ifdef CPTCFG_ATH_USER_REGD
-+ return;
-+#endif
++ if (IS_ENABLED(CPTCFG_ATH_USER_REGD))
++ return;
+
sband = wiphy->bands[NL80211_BAND_2GHZ];
if (!sband)
return;
-@@ -402,6 +410,10 @@ static void ath_reg_apply_radar_flags(st
+@@ -407,6 +419,9 @@ static void ath_reg_apply_radar_flags(st
struct ieee80211_channel *ch;
unsigned int i;
-+#ifdef CPTCFG_ATH_USER_REGD
-+ return;
-+#endif
++ if (IS_ENABLED(CPTCFG_ATH_USER_REGD))
++ return;
+
if (!wiphy->bands[NL80211_BAND_5GHZ])
return;
-@@ -633,6 +645,11 @@ ath_regd_init_wiphy(struct ath_regulator
+@@ -544,6 +559,11 @@ void ath_reg_notifier_apply(struct wiphy
+ ath_reg_dyn_country(wiphy, reg, request);
+ break;
+ }
++
++ /* Prevent broken CTLs from being applied */
++ if (IS_ENABLED(CPTCFG_ATH_USER_REGD) &&
++ reg->regpair != common->reg_world_copy.regpair)
++ reg->regpair = ath_get_regpair(WOR0_WORLD);
+ }
+ EXPORT_SYMBOL(ath_reg_notifier_apply);
+
+@@ -639,6 +659,10 @@ ath_regd_init_wiphy(struct ath_regulator
const struct ieee80211_regdomain *regd;
wiphy->reg_notifier = reg_notifier;
+
-+#ifdef CPTCFG_ATH_USER_REGD
-+ return 0;
-+#endif
++ if (IS_ENABLED(CPTCFG_ATH_USER_REGD))
++ return 0;
+
wiphy->regulatory_flags |= REGULATORY_STRICT_REG |
REGULATORY_CUSTOM_REG;
+@@ -767,10 +791,7 @@ ath_regd_init(struct ath_regulatory *reg
+ if (r)
+ return r;
+
+- if (ath_is_world_regd(reg))
+- memcpy(&common->reg_world_copy, reg,
+- sizeof(struct ath_regulatory));
+-
++ memcpy(&common->reg_world_copy, reg, sizeof(struct ath_regulatory));
+ ath_regd_init_wiphy(reg, wiphy, reg_notifier);
+
+ return 0;
--- a/drivers/net/wireless/ath/Kconfig
+++ b/drivers/net/wireless/ath/Kconfig
@@ -23,6 +23,9 @@ config WLAN_VENDOR_ATH
config ATH_DEBUG
bool "Atheros wireless debugging"
---help---
---- a/.local-symbols
-+++ b/.local-symbols
-@@ -127,6 +127,7 @@ ADM8211=
+--- a/local-symbols
++++ b/local-symbols
+@@ -82,6 +82,7 @@ ADM8211=
ATH_COMMON=
WLAN_VENDOR_ATH=
ATH_DEBUG=