|
@@ -4144,6 +4144,24 @@ static sctp_disposition_t sctp_sf_abort_violation(
|
|
|
goto nomem;
|
|
|
|
|
|
if (asoc) {
|
|
|
+ /* Treat INIT-ACK as a special case during COOKIE-WAIT. */
|
|
|
+ if (chunk->chunk_hdr->type == SCTP_CID_INIT_ACK &&
|
|
|
+ !asoc->peer.i.init_tag) {
|
|
|
+ sctp_initack_chunk_t *initack;
|
|
|
+
|
|
|
+ initack = (sctp_initack_chunk_t *)chunk->chunk_hdr;
|
|
|
+ if (!sctp_chunk_length_valid(chunk,
|
|
|
+ sizeof(sctp_initack_chunk_t)))
|
|
|
+ abort->chunk_hdr->flags |= SCTP_CHUNK_FLAG_T;
|
|
|
+ else {
|
|
|
+ unsigned int inittag;
|
|
|
+
|
|
|
+ inittag = ntohl(initack->init_hdr.init_tag);
|
|
|
+ sctp_add_cmd_sf(commands, SCTP_CMD_UPDATE_INITTAG,
|
|
|
+ SCTP_U32(inittag));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
sctp_add_cmd_sf(commands, SCTP_CMD_REPLY, SCTP_CHUNK(abort));
|
|
|
SCTP_INC_STATS(SCTP_MIB_OUTCTRLCHUNKS);
|
|
|
|