Author: tuexen
Date: Wed Sep 16 13:44:12 2009
New Revision: 197256
URL: http://svn.freebsd.org/changeset/base/197256

Log:
  Fixes two bugs:
  1) A lock issue, if we ever had to try again
     we would double lock the INP lock.
  2) We were allowing (at wrap) associd 0... which really
     we cannot allow since 0 normally means in most socket
     API calls that we are wishing to effect something on
     the INP not TCB.
  
  Approved by: re, rrs (mentor)

Modified:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)
  stable/8/sys/netinet/sctp_pcb.c

Modified: stable/8/sys/netinet/sctp_pcb.c
==============================================================================
--- stable/8/sys/netinet/sctp_pcb.c     Wed Sep 16 13:24:37 2009        
(r197255)
+++ stable/8/sys/netinet/sctp_pcb.c     Wed Sep 16 13:44:12 2009        
(r197256)
@@ -3926,12 +3926,20 @@ sctp_aloc_a_assoc_id(struct sctp_inpcb *
        struct sctpasochead *head;
        struct sctp_tcb *lstcb;
 
+       SCTP_INP_WLOCK(inp);
 try_again:
        if (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_ALLGONE) {
                /* TSNH */
+               SCTP_INP_WUNLOCK(inp);
                return (0);
        }
-       SCTP_INP_WLOCK(inp);
+       /*
+        * We don't allow assoc id to be 0, this is needed otherwise if the
+        * id were to wrap we would have issues with some socket options.
+        */
+       if (inp->sctp_associd_counter == 0) {
+               inp->sctp_associd_counter++;
+       }
        id = inp->sctp_associd_counter;
        inp->sctp_associd_counter++;
        lstcb = sctp_findasoc_ep_asocid_locked(inp, (sctp_assoc_t) id, 0);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to