Author: tuexen
Date: Sun Jul  7 16:53:44 2013
New Revision: 252972
URL: http://svnweb.freebsd.org/changeset/base/252972

Log:
  MFC r250754:
  Don't send an ABORT chunk with verification 0.

Modified:
  stable/9/sys/netinet/sctp_output.c
Directory Properties:
  stable/9/sys/   (props changed)

Modified: stable/9/sys/netinet/sctp_output.c
==============================================================================
--- stable/9/sys/netinet/sctp_output.c  Sun Jul  7 16:51:17 2013        
(r252971)
+++ stable/9/sys/netinet/sctp_output.c  Sun Jul  7 16:53:44 2013        
(r252972)
@@ -10669,6 +10669,7 @@ sctp_send_abort_tcb(struct sctp_tcb *stc
        struct sctp_abort_chunk *abort;
        struct sctp_auth_chunk *auth = NULL;
        struct sctp_nets *net;
+       uint32_t vtag;
        uint32_t auth_offset = 0;
        uint16_t cause_len, chunk_len, padding_len;
 
@@ -10724,7 +10725,14 @@ sctp_send_abort_tcb(struct sctp_tcb *stc
        /* Fill in the ABORT chunk header. */
        abort = mtod(m_abort, struct sctp_abort_chunk *);
        abort->ch.chunk_type = SCTP_ABORT_ASSOCIATION;
-       abort->ch.chunk_flags = 0;
+       if (stcb->asoc.peer_vtag == 0) {
+               /* This happens iff the assoc is in COOKIE-WAIT state. */
+               vtag = stcb->asoc.my_vtag;
+               abort->ch.chunk_flags = SCTP_HAD_NO_TCB;
+       } else {
+               vtag = stcb->asoc.peer_vtag;
+               abort->ch.chunk_flags = 0;
+       }
        abort->ch.chunk_length = htons(chunk_len);
        /* Add padding, if necessary. */
        if (padding_len > 0) {
@@ -10736,7 +10744,7 @@ sctp_send_abort_tcb(struct sctp_tcb *stc
        (void)sctp_lowlevel_chunk_output(stcb->sctp_ep, stcb, net,
            (struct sockaddr *)&net->ro._l_addr,
            m_out, auth_offset, auth, stcb->asoc.authinfo.active_keyid, 1, 0, 0,
-           stcb->sctp_ep->sctp_lport, stcb->rport, htonl(stcb->asoc.peer_vtag),
+           stcb->sctp_ep->sctp_lport, stcb->rport, htonl(vtag),
            stcb->asoc.primary_destination->port, NULL,
            0, 0,
            so_locked);
_______________________________________________
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