Don't accept FORWARD-TSN chunks when I-FORWARD-TSN was negotiated
and vice versa. MFC after: 1 week
This commit is contained in:
parent
32df1c9ebb
commit
c96d7c373e
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=363010
@ -5089,7 +5089,8 @@ sctp_process_control(struct mbuf *m, int iphlen, int *offset, int length,
|
|||||||
break;
|
break;
|
||||||
case SCTP_FORWARD_CUM_TSN:
|
case SCTP_FORWARD_CUM_TSN:
|
||||||
case SCTP_IFORWARD_CUM_TSN:
|
case SCTP_IFORWARD_CUM_TSN:
|
||||||
SCTPDBG(SCTP_DEBUG_INPUT3, "SCTP_FWD_TSN\n");
|
SCTPDBG(SCTP_DEBUG_INPUT3, "%s\n",
|
||||||
|
ch->chunk_type == SCTP_FORWARD_CUM_TSN ? "FORWARD_TSN" : "I_FORWARD_TSN");
|
||||||
if (chk_length < sizeof(struct sctp_forward_tsn_chunk)) {
|
if (chk_length < sizeof(struct sctp_forward_tsn_chunk)) {
|
||||||
/* Its not ours */
|
/* Its not ours */
|
||||||
*offset = length;
|
*offset = length;
|
||||||
@ -5102,6 +5103,18 @@ sctp_process_control(struct mbuf *m, int iphlen, int *offset, int length,
|
|||||||
if (stcb->asoc.prsctp_supported == 0) {
|
if (stcb->asoc.prsctp_supported == 0) {
|
||||||
goto unknown_chunk;
|
goto unknown_chunk;
|
||||||
}
|
}
|
||||||
|
if (((asoc->idata_supported == 1) && (ch->chunk_type == SCTP_FORWARD_CUM_TSN)) ||
|
||||||
|
((asoc->idata_supported == 0) && (ch->chunk_type == SCTP_IFORWARD_CUM_TSN))) {
|
||||||
|
if (ch->chunk_type == SCTP_FORWARD_CUM_TSN) {
|
||||||
|
SCTP_SNPRINTF(msg, sizeof(msg), "%s", "FORWARD-TSN chunk received when I-FORWARD-TSN was negotiated");
|
||||||
|
} else {
|
||||||
|
SCTP_SNPRINTF(msg, sizeof(msg), "%s", "I-FORWARD-TSN chunk received when FORWARD-TSN was negotiated");
|
||||||
|
}
|
||||||
|
op_err = sctp_generate_cause(SCTP_CAUSE_PROTOCOL_VIOLATION, msg);
|
||||||
|
sctp_abort_an_association(inp, stcb, op_err, SCTP_SO_NOT_LOCKED);
|
||||||
|
*offset = length;
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
*fwd_tsn_seen = 1;
|
*fwd_tsn_seen = 1;
|
||||||
if (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) {
|
if (inp->sctp_flags & SCTP_PCB_FLAGS_SOCKET_GONE) {
|
||||||
/* We are not interested anymore */
|
/* We are not interested anymore */
|
||||||
|
Loading…
Reference in New Issue
Block a user