aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuis R. Rodriguez <lrodriguez@atheros.com>2009-05-31 18:24:34 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-06-03 14:05:12 -0400
commit729e9c7663190d71fe5e29831634df80f38199c1 (patch)
treef04635ca9440538e192789ad3cd3041b9b514764
parent3b8bcfd5d31ea0fec58681d035544ace707d2536 (diff)
cfg80211: fix for duplicate userspace replies
This fixes an incorrect assumption (BUG_ON) made in cfg80211 when handling country IE regulatory requests. The assumption was that we won't try to call_crda() twice for the same event and therefore we will not recieve two replies through nl80211 for the regulatory request. As it turns out it is true we don't call_crda() twice for the same event, however, kobject_uevent_env() *might* send the udev event twice and/or userspace can simply process the udev event twice. We remove the BUG_ON() and simply ignore the duplicate request. For details refer to this thread: http://marc.info/?l=linux-wireless&m=124149987921337&w=2 Cc: stable@kernel.org Reported-by: Maxim Levitsky <maximlevitsky@gmail.com> Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--net/wireless/reg.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index f87ac1df2df..ea4c299fbe3 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -2171,7 +2171,13 @@ static int __set_regdom(const struct ieee80211_regdomain *rd)
2171 * the country IE rd with what CRDA believes that country should have 2171 * the country IE rd with what CRDA believes that country should have
2172 */ 2172 */
2173 2173
2174 BUG_ON(!country_ie_regdomain); 2174 /*
2175 * Userspace could have sent two replies with only
2176 * one kernel request. By the second reply we would have
2177 * already processed and consumed the country_ie_regdomain.
2178 */
2179 if (!country_ie_regdomain)
2180 return -EALREADY;
2175 BUG_ON(rd == country_ie_regdomain); 2181 BUG_ON(rd == country_ie_regdomain);
2176 2182
2177 /* 2183 /*