aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorArik Nemtsov <arik@wizery.com>2014-12-04 05:22:16 -0500
committerJohannes Berg <johannes.berg@intel.com>2014-12-12 06:25:33 -0500
commit34f05f543f02350e920bddb7660ffdd4697aaf60 (patch)
tree30dc48d68dada17d558e433c9a59fa0055cc46c7 /net
parent08f6f147773b23b765b94633a8eaa82e7defcf4c (diff)
cfg80211: avoid mem leak on driver hint set
In the already-set and intersect case of a driver-hint, the previous wiphy regdomain was not freed before being reset with a copy of the cfg80211 regdomain. Cc: stable@vger.kernel.org Signed-off-by: Arik Nemtsov <arikx.nemtsov@intel.com> Acked-by: Luis R. Rodriguez <mcgrof@suse.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net')
-rw-r--r--net/wireless/reg.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index 47be6163381c..7ddd16a51adf 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -1907,7 +1907,7 @@ static enum reg_request_treatment
1907reg_process_hint_driver(struct wiphy *wiphy, 1907reg_process_hint_driver(struct wiphy *wiphy,
1908 struct regulatory_request *driver_request) 1908 struct regulatory_request *driver_request)
1909{ 1909{
1910 const struct ieee80211_regdomain *regd; 1910 const struct ieee80211_regdomain *regd, *tmp;
1911 enum reg_request_treatment treatment; 1911 enum reg_request_treatment treatment;
1912 1912
1913 treatment = __reg_process_hint_driver(driver_request); 1913 treatment = __reg_process_hint_driver(driver_request);
@@ -1927,7 +1927,10 @@ reg_process_hint_driver(struct wiphy *wiphy,
1927 reg_free_request(driver_request); 1927 reg_free_request(driver_request);
1928 return REG_REQ_IGNORE; 1928 return REG_REQ_IGNORE;
1929 } 1929 }
1930
1931 tmp = get_wiphy_regdom(wiphy);
1930 rcu_assign_pointer(wiphy->regd, regd); 1932 rcu_assign_pointer(wiphy->regd, regd);
1933 rcu_free_regdom(tmp);
1931 } 1934 }
1932 1935
1933 1936