* [PATCH] cfg80211: process pending events when unregistering net device
@ 2012-08-02 17:41 Daniel Drake
2012-08-02 20:04 ` Johannes Berg
0 siblings, 1 reply; 2+ messages in thread
From: Daniel Drake @ 2012-08-02 17:41 UTC (permalink / raw)
To: linville, johannes; +Cc: linux-wireless
libertas currently calls cfg80211_disconnected() when it is being
brought down. This causes an event to be allocated, but since the
wdev is already removed from the rdev by the time that the event
processing work executes, the event is never processed or freed.
http://article.gmane.org/gmane.linux.kernel.wireless.general/95666
Fix this leak, and other possible situations, by processing the event
queue when a device is being unregistered. Thanks to Johannes Berg for
the suggestion.
Signed-off-by: Daniel Drake <dsd@laptop.org>
---
net/wireless/core.c | 5 +++++
net/wireless/core.h | 1 +
net/wireless/util.c | 2 +-
3 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/net/wireless/core.c b/net/wireless/core.c
index 31b40cc..dcd64d5 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -952,6 +952,11 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
*/
synchronize_rcu();
INIT_LIST_HEAD(&wdev->list);
+ /*
+ * Ensure that all events have been processed and
+ * freed.
+ */
+ cfg80211_process_wdev_events(wdev);
break;
case NETDEV_PRE_UP:
if (!(wdev->wiphy->interface_modes & BIT(wdev->iftype)))
diff --git a/net/wireless/core.h b/net/wireless/core.h
index 5206c68..bc7430b 100644
--- a/net/wireless/core.h
+++ b/net/wireless/core.h
@@ -426,6 +426,7 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
struct net_device *dev, enum nl80211_iftype ntype,
u32 *flags, struct vif_params *params);
void cfg80211_process_rdev_events(struct cfg80211_registered_device *rdev);
+void cfg80211_process_wdev_events(struct wireless_dev *wdev);
int cfg80211_can_use_iftype_chan(struct cfg80211_registered_device *rdev,
struct wireless_dev *wdev,
diff --git a/net/wireless/util.c b/net/wireless/util.c
index 26f8cd3..994e2f0 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -735,7 +735,7 @@ void cfg80211_upload_connect_keys(struct wireless_dev *wdev)
wdev->connect_keys = NULL;
}
-static void cfg80211_process_wdev_events(struct wireless_dev *wdev)
+void cfg80211_process_wdev_events(struct wireless_dev *wdev)
{
struct cfg80211_event *ev;
unsigned long flags;
--
1.7.11.2
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] cfg80211: process pending events when unregistering net device
2012-08-02 17:41 [PATCH] cfg80211: process pending events when unregistering net device Daniel Drake
@ 2012-08-02 20:04 ` Johannes Berg
0 siblings, 0 replies; 2+ messages in thread
From: Johannes Berg @ 2012-08-02 20:04 UTC (permalink / raw)
To: Daniel Drake; +Cc: linville, linux-wireless
On Thu, 2012-08-02 at 18:41 +0100, Daniel Drake wrote:
> libertas currently calls cfg80211_disconnected() when it is being
> brought down. This causes an event to be allocated, but since the
> wdev is already removed from the rdev by the time that the event
> processing work executes, the event is never processed or freed.
> http://article.gmane.org/gmane.linux.kernel.wireless.general/95666
>
> Fix this leak, and other possible situations, by processing the event
> queue when a device is being unregistered. Thanks to Johannes Berg for
> the suggestion.
>
> Signed-off-by: Daniel Drake <dsd@laptop.org>
This should probably be Cc: stable too? John, can you pick up the patch,
since I see you already pulled my earlier pull requested?
Cc: stable@vger.kernel.org
Reviewed-by: Johannes Berg <johannes@sipsolutions.net>
johannes
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-08-02 20:04 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-02 17:41 [PATCH] cfg80211: process pending events when unregistering net device Daniel Drake
2012-08-02 20:04 ` Johannes Berg
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).