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.
This commit is contained in:
parent
1a58327bc3
commit
884d8c53e6
@ -3983,17 +3983,16 @@ sctp_abort_association(struct sctp_inpcb *inp, struct sctp_tcb *stcb,
|
||||
|
||||
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_inpcb *inp, struct sctp_tcb *stcb,
|
||||
} 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_inpcb *inp, struct sctp_tcb *stcb,
|
||||
(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_inpcb *inp, struct sockaddr *addr,
|
||||
#endif
|
||||
default:
|
||||
*totaddr = i;
|
||||
incr = 0;
|
||||
/* we are done */
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user