summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortuexen <tuexen@FreeBSD.org>2009-07-27 13:41:45 +0000
committertuexen <tuexen@FreeBSD.org>2009-07-27 13:41:45 +0000
commit23576da010b9826c283b7e25c08045c9cda6308d (patch)
treefaff3407a8db124db66f9db9438554472119d967
parent0e515c7ffe50a1a1d00b5e4ad5b1118e940c5b3c (diff)
downloadFreeBSD-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.
-rw-r--r--sys/netinet/sctp_indata.c8
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;
}
OpenPOWER on IntegriCloud