diff options
author | tuexen <tuexen@FreeBSD.org> | 2009-07-27 13:41:45 +0000 |
---|---|---|
committer | tuexen <tuexen@FreeBSD.org> | 2009-07-27 13:41:45 +0000 |
commit | 23576da010b9826c283b7e25c08045c9cda6308d (patch) | |
tree | faff3407a8db124db66f9db9438554472119d967 /sys/netinet | |
parent | 0e515c7ffe50a1a1d00b5e4ad5b1118e940c5b3c (diff) | |
download | FreeBSD-src-23576da010b9826c283b7e25c08045c9cda6308d.zip FreeBSD-src-23576da010b9826c283b7e25c08045c9cda6308d.tar.gz |
Fix the handling of unordered messages when using
PR-SCTP.
Approved by: re, rrs (mentor)
MFC after: 3 weeks.
Diffstat (limited to 'sys/netinet')
-rw-r--r-- | sys/netinet/sctp_indata.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/sys/netinet/sctp_indata.c b/sys/netinet/sctp_indata.c index 6578476..40990f6 100644 --- a/sys/netinet/sctp_indata.c +++ b/sys/netinet/sctp_indata.c @@ -5923,7 +5923,13 @@ sctp_flush_reassm_for_str_seq(struct sctp_tcb *stcb, chk = TAILQ_FIRST(&asoc->reasmqueue); while (chk) { at = TAILQ_NEXT(chk, sctp_next); - if (chk->rec.data.stream_number != stream) { + /* + * Do not toss it if on a different stream or marked + * for unordered delivery in which case the stream + * sequence number has no meaning. + */ + if ((chk->rec.data.stream_number != stream) || + ((chk->rec.data.rcv_flags & SCTP_DATA_UNORDERED) == SCTP_DATA_UNORDERED)) { chk = at; continue; } |