--- linux-work/net/ipv4/tcp_input.c-SYNACK Wed Apr 18 17:59:26 2001 +++ linux-work/net/ipv4/tcp_input.c Tue May 15 12:05:06 2001 @@ -1932,16 +1932,20 @@ tcp_send_ack(sk); goto discard; } - - if(th->syn && TCP_SKB_CB(skb)->seq != tp->syn_seq) { - SOCK_DEBUG(sk, "syn in established state\n"); - tcp_statistics.TcpInErrs++; - tcp_reset(sk); - return 1; - } if(th->rst) { tcp_reset(sk); + goto discard; + } + + if(th->syn) { + if (TCP_SKB_CB(skb)->seq != tp->syn_seq || + skb->len > th->doff*4) { + tcp_statistics.TcpInErrs++; + tcp_reset(sk); + return 1; + } + tcp_send_ack(sk); goto discard; }