diff options
Diffstat (limited to 'net/wireless')
-rw-r--r-- | net/wireless/nl80211.c | 5 | ||||
-rw-r--r-- | net/wireless/reg.c | 9 |
2 files changed, 6 insertions, 8 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 9a16e9e6c5ca..f82cc9aa6908 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -1935,12 +1935,9 @@ static int nl80211_set_reg(struct sk_buff *skb, struct genl_info *info) | |||
1935 | mutex_lock(&cfg80211_drv_mutex); | 1935 | mutex_lock(&cfg80211_drv_mutex); |
1936 | r = set_regdom(rd); | 1936 | r = set_regdom(rd); |
1937 | mutex_unlock(&cfg80211_drv_mutex); | 1937 | mutex_unlock(&cfg80211_drv_mutex); |
1938 | if (r) | ||
1939 | goto bad_reg; | ||
1940 | |||
1941 | return r; | 1938 | return r; |
1942 | 1939 | ||
1943 | bad_reg: | 1940 | bad_reg: |
1944 | kfree(rd); | 1941 | kfree(rd); |
1945 | return -EINVAL; | 1942 | return -EINVAL; |
1946 | } | 1943 | } |
diff --git a/net/wireless/reg.c b/net/wireless/reg.c index 00c326b66c03..038f8f133c54 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c | |||
@@ -605,7 +605,6 @@ int __regulatory_hint(struct wiphy *wiphy, enum reg_set_by set_by, | |||
605 | return r; | 605 | return r; |
606 | } | 606 | } |
607 | 607 | ||
608 | /* If rd is not NULL and if this call fails the caller must free it */ | ||
609 | int regulatory_hint(struct wiphy *wiphy, const char *alpha2, | 608 | int regulatory_hint(struct wiphy *wiphy, const char *alpha2, |
610 | struct ieee80211_regdomain *rd) | 609 | struct ieee80211_regdomain *rd) |
611 | { | 610 | { |
@@ -690,6 +689,7 @@ void print_regdomain_info(const struct ieee80211_regdomain *rd) | |||
690 | print_rd_rules(rd); | 689 | print_rd_rules(rd); |
691 | } | 690 | } |
692 | 691 | ||
692 | /* Takes ownership of rd only if it doesn't fail */ | ||
693 | static int __set_regdom(const struct ieee80211_regdomain *rd) | 693 | static int __set_regdom(const struct ieee80211_regdomain *rd) |
694 | { | 694 | { |
695 | /* Some basic sanity checks first */ | 695 | /* Some basic sanity checks first */ |
@@ -750,16 +750,17 @@ static int __set_regdom(const struct ieee80211_regdomain *rd) | |||
750 | 750 | ||
751 | /* Use this call to set the current regulatory domain. Conflicts with | 751 | /* Use this call to set the current regulatory domain. Conflicts with |
752 | * multiple drivers can be ironed out later. Caller must've already | 752 | * multiple drivers can be ironed out later. Caller must've already |
753 | * kmalloc'd the rd structure. If this calls fails you should kfree() | 753 | * kmalloc'd the rd structure. Caller must hold cfg80211_drv_mutex */ |
754 | * the passed rd. Caller must hold cfg80211_drv_mutex */ | ||
755 | int set_regdom(const struct ieee80211_regdomain *rd) | 754 | int set_regdom(const struct ieee80211_regdomain *rd) |
756 | { | 755 | { |
757 | int r; | 756 | int r; |
758 | 757 | ||
759 | /* Note that this doesn't update the wiphys, this is done below */ | 758 | /* Note that this doesn't update the wiphys, this is done below */ |
760 | r = __set_regdom(rd); | 759 | r = __set_regdom(rd); |
761 | if (r) | 760 | if (r) { |
761 | kfree(rd); | ||
762 | return r; | 762 | return r; |
763 | } | ||
763 | 764 | ||
764 | /* This would make this whole thing pointless */ | 765 | /* This would make this whole thing pointless */ |
765 | BUG_ON(rd != cfg80211_regdomain); | 766 | BUG_ON(rd != cfg80211_regdomain); |