linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 2.6 IrDA] LAP close race
@ 2003-09-05 21:43 Jean Tourrilhes
  0 siblings, 0 replies; only message in thread
From: Jean Tourrilhes @ 2003-09-05 21:43 UTC (permalink / raw)
  To: Jeff Garzik, Linux kernel mailing list

ir2604_lap_close_race-5.diff :
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	o [CRITICA] Fix a race condition when closing the LAP
		prevent the stack to open new LSAPs while we are killing them.


diff -u -p linux/net/irda/irlap.d2.c linux/net/irda/irlap.c
--- linux/net/irda/irlap.d2.c	Thu Sep  4 18:30:08 2003
+++ linux/net/irda/irlap.c	Thu Sep  4 18:30:37 2003
@@ -221,8 +221,11 @@ void irlap_close(struct irlap_cb *self)
 	ASSERT(self != NULL, return;);
 	ASSERT(self->magic == LAP_MAGIC, return;);
 
-	irlap_disconnect_indication(self, LAP_DISC_INDICATION);
+	/* We used to send a LAP_DISC_INDICATION here, but this was
+	 * racy. This has been move within irlmp_unregister_link()
+	 * itself. Jean II */
 
+	/* Kill the LAP and all LSAPs on top of it */
 	irlmp_unregister_link(self->saddr);
 	self->notify.instance = NULL;
 
diff -u -p linux/net/irda/irlmp.d2.c linux/net/irda/irlmp.c
--- linux/net/irda/irlmp.d2.c	Thu Sep  4 18:30:15 2003
+++ linux/net/irda/irlmp.c	Thu Sep  4 18:30:37 2003
@@ -321,15 +321,23 @@ void irlmp_unregister_link(__u32 saddr)
 
 	IRDA_DEBUG(4, "%s()\n", __FUNCTION__);
 
+	/* We must remove ourselves from the hashbin *first*. This ensure
+	 * that no more LSAPs will be open on this link and no discovery
+	 * will be triggered anymore. Jean II */
 	link = hashbin_remove(irlmp->links, saddr, NULL);
 	if (link) {
 		ASSERT(link->magic == LMP_LAP_MAGIC, return;);
 
+		/* Kill all the LSAPs on this link. Jean II */
+		link->reason = LAP_DISC_INDICATION;
+		link->daddr = DEV_ADDR_ANY;
+		irlmp_do_lap_event(link, LM_LAP_DISCONNECT_INDICATION, NULL);
+
 		/* Remove all discoveries discovered at this link */
 		irlmp_expire_discoveries(irlmp->cachelog, link->saddr, TRUE);
 
+		/* Final cleanup */
 		del_timer(&link->idle_timer);
-
 		link->magic = 0;
 		kfree(link);
 	}

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2003-09-05 21:46 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-09-05 21:43 [PATCH 2.6 IrDA] LAP close race Jean Tourrilhes

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).