diff options
author | tuexen <tuexen@FreeBSD.org> | 2010-12-22 17:59:38 +0000 |
---|---|---|
committer | tuexen <tuexen@FreeBSD.org> | 2010-12-22 17:59:38 +0000 |
commit | c17bd2abe06cae94dd7c76d82b5484b79b746af2 (patch) | |
tree | 80303e0e707760d51274d8c8dfdfdf5f3083faab /sys/netinet/sctp_usrreq.c | |
parent | aa42d9f67fb8820598ba9b01c9f9de9a6525eba1 (diff) | |
download | FreeBSD-src-c17bd2abe06cae94dd7c76d82b5484b79b746af2.zip FreeBSD-src-c17bd2abe06cae94dd7c76d82b5484b79b746af2.tar.gz |
Improve plausibility check in sctp_handle_sack().
Allow cmt_on_off to support values 0 (no CMT), 1 (CMT), and 2 (CMT/RP).
MFC after: 3 months.
Diffstat (limited to 'sys/netinet/sctp_usrreq.c')
-rw-r--r-- | sys/netinet/sctp_usrreq.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/sys/netinet/sctp_usrreq.c b/sys/netinet/sctp_usrreq.c index 812a459..5211ea5 100644 --- a/sys/netinet/sctp_usrreq.c +++ b/sys/netinet/sctp_usrreq.c @@ -292,7 +292,7 @@ sctp_notify(struct sctp_inpcb *inp, * PF state. */ /* Stop any running T3 timers here? */ - if ((stcb->asoc.sctp_cmt_on_off == 1) && + if ((stcb->asoc.sctp_cmt_on_off > 0) && (stcb->asoc.sctp_cmt_pf > 0)) { net->dest_state &= ~SCTP_ADDR_PF; SCTPDBG(SCTP_DEBUG_TIMER4, "Destination %p moved from PF to unreachable.\n", @@ -2840,17 +2840,17 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize, SCTP_CHECK_AND_CAST(av, optval, struct sctp_assoc_value, optsize); SCTP_FIND_STCB(inp, stcb, av->assoc_id); if (stcb) { - if (av->assoc_value != 0) - stcb->asoc.sctp_cmt_on_off = 1; - else - stcb->asoc.sctp_cmt_on_off = 0; + stcb->asoc.sctp_cmt_on_off = av->assoc_value; + if (stcb->asoc.sctp_cmt_on_off > 2) { + stcb->asoc.sctp_cmt_on_off = 2; + } SCTP_TCB_UNLOCK(stcb); } else { SCTP_INP_WLOCK(inp); - if (av->assoc_value != 0) - inp->sctp_cmt_on_off = 1; - else - inp->sctp_cmt_on_off = 0; + inp->sctp_cmt_on_off = av->assoc_value; + if (inp->sctp_cmt_on_off > 2) { + inp->sctp_cmt_on_off = 2; + } SCTP_INP_WUNLOCK(inp); } } else { |