svn commit: r215241 - head/sys/netinet

Michael Tuexen tuexen at FreeBSD.org
Sat Nov 13 12:52:44 UTC 2010


Author: tuexen
Date: Sat Nov 13 12:52:44 2010
New Revision: 215241
URL: http://svn.freebsd.org/changeset/base/215241

Log:
  Fix a locking issue reported by brucec@ affecting
  1-to-1 style sockets which have not yet been
  accepted.
  
  MFC after: 3 days.

Modified:
  head/sys/netinet/sctp_pcb.c

Modified: head/sys/netinet/sctp_pcb.c
==============================================================================
--- head/sys/netinet/sctp_pcb.c	Sat Nov 13 11:54:04 2010	(r215240)
+++ head/sys/netinet/sctp_pcb.c	Sat Nov 13 12:52:44 2010	(r215241)
@@ -3464,6 +3464,7 @@ sctp_inpcb_free(struct sctp_inpcb *inp, 
 	cnt = 0;
 	for ((asoc = LIST_FIRST(&inp->sctp_asoc_list)); asoc != NULL;
 	    asoc = nasoc) {
+		SCTP_TCB_LOCK(asoc);
 		nasoc = LIST_NEXT(asoc, sctp_tcblist);
 		if (asoc->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) {
 			if (asoc->asoc.state & SCTP_STATE_IN_ACCEPT_QUEUE) {
@@ -3471,10 +3472,10 @@ sctp_inpcb_free(struct sctp_inpcb *inp, 
 				sctp_timer_start(SCTP_TIMER_TYPE_ASOCKILL, inp, asoc, NULL);
 			}
 			cnt++;
+			SCTP_TCB_UNLOCK(asoc);
 			continue;
 		}
 		/* Free associations that are NOT killing us */
-		SCTP_TCB_LOCK(asoc);
 		if ((SCTP_GET_STATE(&asoc->asoc) != SCTP_STATE_COOKIE_WAIT) &&
 		    ((asoc->asoc.state & SCTP_STATE_ABOUT_TO_BE_FREED) == 0)) {
 			struct mbuf *op_err;


More information about the svn-src-all mailing list