diff options
author | Luis R. Rodriguez <lrodriguez@atheros.com> | 2009-05-31 18:24:34 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-06-03 14:05:12 -0400 |
commit | 729e9c7663190d71fe5e29831634df80f38199c1 (patch) | |
tree | f04635ca9440538e192789ad3cd3041b9b514764 /net/wireless/reg.c | |
parent | 3b8bcfd5d31ea0fec58681d035544ace707d2536 (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>
Diffstat (limited to 'net/wireless/reg.c')
-rw-r--r-- | net/wireless/reg.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/net/wireless/reg.c b/net/wireless/reg.c index f87ac1df2df5..ea4c299fbe3b 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 | /* |