linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH stable] softmac: Fix deadlock of wx_set_essid with assoc work
@ 2007-08-01 10:53 Michael Buesch
  2007-08-02 21:55 ` Johannes Berg
  2007-08-02 22:02 ` Johannes Berg
  0 siblings, 2 replies; 8+ messages in thread
From: Michael Buesch @ 2007-08-01 10:53 UTC (permalink / raw)
  To: stable; +Cc: John Linville, David Woodhouse, linux-wireless

The essid wireless extension does deadlock against the assoc mutex,
as we don't unlock the assoc mutex when flushing the workqueue, which
also holds the lock.

This patch is queued for inclusion in the wireless-2.6 tree.

Signed-off-by: Michael Buesch <mb@bu3sch.de>

Index: bu3sch-wireless-dev/net/ieee80211/softmac/ieee80211softmac_wx.c
===================================================================
--- bu3sch-wireless-dev.orig/net/ieee80211/softmac/ieee80211softmac_wx.c	2007-07-14 18:18:06.000000000 +0200
+++ bu3sch-wireless-dev/net/ieee80211/softmac/ieee80211softmac_wx.c	2007-07-31 20:30:08.000000000 +0200
@@ -74,8 +74,8 @@ ieee80211softmac_wx_set_essid(struct net
 	struct ieee80211softmac_auth_queue_item *authptr;
 	int length = 0;
 
+check_assoc_again:
 	mutex_lock(&sm->associnfo.mutex);
-
 	/* Check if we're already associating to this or another network
 	 * If it's another network, cancel and start over with our new network
 	 * If it's our network, ignore the change, we're already doing it!
@@ -98,13 +98,18 @@ ieee80211softmac_wx_set_essid(struct net
 				cancel_delayed_work(&authptr->work);
 			sm->associnfo.bssvalid = 0;
 			sm->associnfo.bssfixed = 0;
-			flush_scheduled_work();
 			sm->associnfo.associating = 0;
 			sm->associnfo.associated = 0;
+			/* We must unlock to avoid deadlocks with the assoc workqueue
+			 * on the associnfo.mutex */
+			mutex_unlock(&sm->associnfo.mutex);
+			flush_scheduled_work();
+			/* Avoid race! Check assoc status again. Maybe someone started an
+			 * association while we flushed. */
+			goto check_assoc_again;
 		}
 	}
 
-
 	sm->associnfo.static_essid = 0;
 	sm->associnfo.assoc_wait = 0;
 

-------------------------------------------------------

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2007-08-07 10:09 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-08-01 10:53 [PATCH stable] softmac: Fix deadlock of wx_set_essid with assoc work Michael Buesch
2007-08-02 21:55 ` Johannes Berg
2007-08-02 22:02 ` Johannes Berg
2007-08-03 10:50   ` Michael Buesch
2007-08-03 14:49     ` Johannes Berg
2007-08-06 14:23     ` Johannes Berg
2007-08-07  9:57       ` Michael Buesch
2007-08-07 10:10         ` 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).