Skip to content

Commit a42ee1f

Browse files
xin.guoNipaLocal
authored andcommitted
tcp: fix tcp_ofo_queue() to avoid including too much DUP SACK range
If the new coming segment covers more than one skbs in the ofo queue, and which seq is equal to rcv_nxt , then the sequence range that is not duplicated will be sent as DUP SACK, the detail as below, in step6, the {501,2001} range is clearly including too much DUP SACK range: 1. client.43629 > server.8080: Flags [.], seq 501:1001, ack 1325288529, win 20000, length 500: HTTP 2. server.8080 > client.43629: Flags [.], ack 1, win 65535, options [nop,nop,TS val 269383721 ecr 200,nop,nop,sack 1 {501:1001}], length 0 3. Iclient.43629 > server.8080: Flags [.], seq 1501:2001, ack 1325288529, win 20000, length 500: HTTP 4. server.8080 > client.43629: Flags [.], ack 1, win 65535, options [nop,nop,TS val 269383721 ecr 200,nop,nop,sack 2 {1501:2001} {501:1001}], length 0 5. client.43629 > server.8080: Flags [.], seq 1:2001, ack 1325288529, win 20000, length 2000: HTTP 6. server.8080 > client.43629: Flags [.], ack 2001, win 65535, options [nop,nop,TS val 269383722 ecr 200,nop,nop,sack 1 {501:2001}], length 0 Signed-off-by: xin.guo <[email protected]> Signed-off-by: NipaLocal <nipa@local>
1 parent 41b5c20 commit a42ee1f

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

net/ipv4/tcp_input.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4848,7 +4848,7 @@ static void tcp_ofo_queue(struct sock *sk)
48484848
if (before(TCP_SKB_CB(skb)->seq, dsack_high)) {
48494849
__u32 dsack = dsack_high;
48504850
if (before(TCP_SKB_CB(skb)->end_seq, dsack_high))
4851-
dsack_high = TCP_SKB_CB(skb)->end_seq;
4851+
dsack = TCP_SKB_CB(skb)->end_seq;
48524852
tcp_dsack_extend(sk, TCP_SKB_CB(skb)->seq, dsack);
48534853
}
48544854
p = rb_next(p);

0 commit comments

Comments
 (0)