Author: tuexen
Date: Wed Aug 24 06:22:53 2016
New Revision: 304736
URL: https://svnweb.freebsd.org/changeset/base/304736

Log:
  When aborting an association, send the ABORT before notifying the upper
  layer. For the kernel this doesn't matter, for the userland stack, it does.
  While there, silence a clang warning when compiling it in userland.

Modified:
  head/sys/netinet/sctputil.c

Modified: head/sys/netinet/sctputil.c
==============================================================================
--- head/sys/netinet/sctputil.c Wed Aug 24 05:54:11 2016        (r304735)
+++ head/sys/netinet/sctputil.c Wed Aug 24 06:22:53 2016        (r304736)
@@ -3983,17 +3983,16 @@ sctp_abort_association(struct sctp_inpcb
 
        vtag = 0;
        if (stcb != NULL) {
-               /* We have a TCB to abort, send notification too */
                vtag = stcb->asoc.peer_vtag;
-               sctp_abort_notification(stcb, 0, 0, NULL, SCTP_SO_NOT_LOCKED);
-               /* get the assoc vrf id and table id */
                vrf_id = stcb->asoc.vrf_id;
-               stcb->asoc.state |= SCTP_STATE_WAS_ABORTED;
        }
        sctp_send_abort(m, iphlen, src, dst, sh, vtag, op_err,
            mflowtype, mflowid, inp->fibnum,
            vrf_id, port);
        if (stcb != NULL) {
+               /* We have a TCB to abort, send notification too */
+               sctp_abort_notification(stcb, 0, 0, NULL, SCTP_SO_NOT_LOCKED);
+               stcb->asoc.state |= SCTP_STATE_WAS_ABORTED;
                /* Ok, now lets free it */
 #if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING)
                so = SCTP_INP_SO(inp);
@@ -4109,10 +4108,6 @@ sctp_abort_an_association(struct sctp_in
        } else {
                stcb->asoc.state |= SCTP_STATE_WAS_ABORTED;
        }
-       /* notify the ulp */
-       if ((inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) == 0) {
-               sctp_abort_notification(stcb, 0, 0, NULL, so_locked);
-       }
        /* notify the peer */
        sctp_send_abort_tcb(stcb, op_err, so_locked);
        SCTP_STAT_INCR_COUNTER32(sctps_aborted);
@@ -4120,6 +4115,10 @@ sctp_abort_an_association(struct sctp_in
            (SCTP_GET_STATE(&stcb->asoc) == SCTP_STATE_SHUTDOWN_RECEIVED)) {
                SCTP_STAT_DECR_GAUGE32(sctps_currestab);
        }
+       /* notify the ulp */
+       if ((inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) == 0) {
+               sctp_abort_notification(stcb, 0, 0, NULL, so_locked);
+       }
        /* now free the asoc */
 #ifdef SCTP_ASOCLOG_OF_TSNS
        sctp_print_out_track_log(stcb);
@@ -6400,6 +6399,7 @@ sctp_connectx_helper_find(struct sctp_in
 #endif
                default:
                        *totaddr = i;
+                       incr = 0;
                        /* we are done */
                        break;
                }
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to