diff options
author | Gerrit Renker <gerrit@erg.abdn.ac.uk> | 2007-11-24 17:37:48 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 17:54:51 -0500 |
commit | 3de5489f47febe0333b142e0eb6389b9924b2634 (patch) | |
tree | 6ac340c65f64245d14c21a4bca03580c3d9789fe /net/dccp/ccids | |
parent | a47c51044a77124ce66cd8513bba6f4d7673e43d (diff) |
[CCID2]: Bug in reading Ack Vectors
In CCID2 the receiver-history is sorted in ascending order of sequence number,
but the processing of received Ack Vectors requires the list traversal in the
opposite direction.
The current code has a bug in this regard: the list traversal is upwards. As a
consequence, only Ack Vectors with a run length of 1 will pass, in all other
Ack Vectors the remaining (acked) sequence numbers are missed, and may later
falsely be identified as lost.
Note: This bug is only visible when Ack Ratio > 1, since otherwise the run
lengths of Ack Vectors are 0.
Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: Ian McDonald <ian.mcdonald@jandi.co.nz>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/dccp/ccids')
-rw-r--r-- | net/dccp/ccids/ccid2.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/dccp/ccids/ccid2.c b/net/dccp/ccids/ccid2.c index c9c465e86281..7873dc78b6bc 100644 --- a/net/dccp/ccids/ccid2.c +++ b/net/dccp/ccids/ccid2.c | |||
@@ -666,7 +666,7 @@ static void ccid2_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb) | |||
666 | done = 1; | 666 | done = 1; |
667 | break; | 667 | break; |
668 | } | 668 | } |
669 | seqp = seqp->ccid2s_next; | 669 | seqp = seqp->ccid2s_prev; |
670 | } | 670 | } |
671 | if (done) | 671 | if (done) |
672 | break; | 672 | break; |