summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerrit Renker <gerrit@erg.abdn.ac.uk>2010-11-23 02:36:56 +0000
committerDavid S. Miller <davem@davemloft.net>2010-11-28 11:29:27 -0800
commit0ac78870220b6e0ac74dd9292bcfa7b18718babd (patch)
tree19b0359b9a805857acf9ab713afd4e485e4da692
parenta301e1703edc088592f8c5c16f9bdd34a0792776 (diff)
downloadlinux-3.10-0ac78870220b6e0ac74dd9292bcfa7b18718babd.tar.gz
linux-3.10-0ac78870220b6e0ac74dd9292bcfa7b18718babd.tar.bz2
linux-3.10-0ac78870220b6e0ac74dd9292bcfa7b18718babd.zip
dccp: fix error in updating the GAR
This fixes a bug in updating the Greatest Acknowledgment number Received (GAR): the current implementation does not track the greatest received value - lower values in the range AWL..AWH (RFC 4340, 7.5.1) erase higher ones. Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/dccp/input.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/dccp/input.c b/net/dccp/input.c
index 265985370fa..e424a09e83f 100644
--- a/net/dccp/input.c
+++ b/net/dccp/input.c
@@ -239,7 +239,8 @@ static int dccp_check_seqno(struct sock *sk, struct sk_buff *skb)
dccp_update_gsr(sk, seqno);
if (dh->dccph_type != DCCP_PKT_SYNC &&
- (ackno != DCCP_PKT_WITHOUT_ACK_SEQ))
+ ackno != DCCP_PKT_WITHOUT_ACK_SEQ &&
+ after48(ackno, dp->dccps_gar))
dp->dccps_gar = ackno;
} else {
unsigned long now = jiffies;