Re: [BUG] Crda oopses the system

Luis R. Rodriguez
2009-05-31T06:22:27Z

On Fri, May 22, 2009 at 01:08:22PM +0300, Maxim Levitsky wrote:
> I am talking about
>
> BUG_ON(!country_ie_regdomain);
> in net/wireless/reg.c

Please try this patch and leave a window open with this running:

iw event

Please be sure to grab iw from git, not sure if the reg events
have all gone into an official release yet. What I'm looking for
is whether or not a previous 11d setting was already processed
or if the !country_ie_regdomain condition happens from the first
11d processing.

Luis

diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index f87ac1d..1b60dfc 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -2171,7 +2171,11 @@ static int __set_regdom(const struct ieee80211_regdomain *rd)
* the country IE rd with what CRDA believes that country should have
*/

- BUG_ON(!country_ie_regdomain);
+ if (WARN_ON(!country_ie_regdomain)) {
+ kfree(rd);
+ rd = NULL;
+ return -EINVAL;
+ }
BUG_ON(rd == country_ie_regdomain);

/*
@@ -2268,6 +2272,8 @@ int regulatory_init(void)
if (IS_ERR(reg_pdev))
return PTR_ERR(reg_pdev);

+ country_ie_regdomain = NULL;
+
spin_lock_init(&reg_requests_lock);
spin_lock_init(&reg_pending_beacons_lock);