On Thu, 25 Jan 2007 20:29:03 +0200 Baruch Even <[EMAIL PROTECTED]> wrote:
> The sorting of SACK blocks actually munges them rather than sort, causing the > TCP stack to ignore some SACK information and breaking the assumption of > ordered SACK blocks after sorting. > > The sort takes the data from a second buffer which isn't moved causing > subsequent data moves to occur from the wrong location. The fix is to > use a temporary buffer as a normal sort does. > > Signed-Off-By: Baruch Even <[EMAIL PROTECTED]> > > diff -X 2.6-rc6/Documentation/dontdiff -ur 2.6-rc6/net/ipv4/tcp_input.c > 2.6-mod/net/ipv4/tcp_input.c > --- 2.6-rc6/net/ipv4/tcp_input.c 2007-01-25 19:04:20.000000000 +0200 > +++ 2.6-mod/net/ipv4/tcp_input.c 2007-01-25 19:52:04.000000000 +0200 > @@ -1011,10 +1011,11 @@ > for (j = 0; j < i; j++){ > if (after(ntohl(sp[j].start_seq), > ntohl(sp[j+1].start_seq))){ > - sp[j].start_seq = > htonl(tp->recv_sack_cache[j+1].start_seq); > - sp[j].end_seq = > htonl(tp->recv_sack_cache[j+1].end_seq); > - sp[j+1].start_seq = > htonl(tp->recv_sack_cache[j].start_seq); > - sp[j+1].end_seq = > htonl(tp->recv_sack_cache[j].end_seq); > + struct tcp_sack_block_wire tmp; > + > + tmp = sp[j]; > + sp[j] = sp[j+1]; > + sp[j+1] = tmp; > } > > } This looks okay, but is there a test case that can be run? -- Stephen Hemminger <[EMAIL PROTECTED]> - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html