2010-01-11 15:15:05

by Johannes Berg

[permalink] [raw]
Subject: [PATCH 2.6.33] cfg80211: fix refcount imbalance when wext is disabled

When CONFIG_CFG80211_WEXT is not set, there is
a refcount imbalance with rdev->opencount, fix
that by moving it out of the ifdef.

Reported-by: Alan Stern <[email protected]>
Signed-off-by: Johannes Berg <[email protected]>
---
net/wireless/core.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

--- wireless-testing.orig/net/wireless/core.c 2010-01-11 16:11:50.000000000 +0100
+++ wireless-testing/net/wireless/core.c 2010-01-11 16:12:04.000000000 +0100
@@ -745,9 +745,9 @@ static int cfg80211_netdev_notifier_call
mutex_unlock(&rdev->devlist_mtx);
dev_put(dev);
}
-#ifdef CONFIG_CFG80211_WEXT
cfg80211_lock_rdev(rdev);
mutex_lock(&rdev->devlist_mtx);
+#ifdef CONFIG_CFG80211_WEXT
wdev_lock(wdev);
switch (wdev->iftype) {
case NL80211_IFTYPE_ADHOC:
@@ -760,10 +760,10 @@ static int cfg80211_netdev_notifier_call
break;
}
wdev_unlock(wdev);
+#endif
rdev->opencount++;
mutex_unlock(&rdev->devlist_mtx);
cfg80211_unlock_rdev(rdev);
-#endif
break;
case NETDEV_UNREGISTER:
/*




2010-01-12 14:32:55

by Alan Stern

[permalink] [raw]
Subject: Re: [PATCH 2.6.33] cfg80211: fix refcount imbalance when wext is disabled

On Mon, 11 Jan 2010, Johannes Berg wrote:

> When CONFIG_CFG80211_WEXT is not set, there is
> a refcount imbalance with rdev->opencount, fix
> that by moving it out of the ifdef.
>
> Reported-by: Alan Stern <[email protected]>
> Signed-off-by: Johannes Berg <[email protected]>

I confirm that this fixes hang in rmmod. And enabling
CONFIG_CFG80211_WEXT fixes the issue about the wireless card not
working.

Tested-by: Alan Stern <[email protected]>

Alan Stern