patch-2.4.5 linux/net/ipv4/tcp_input.c

Next file: linux/net/ipv6/Config.in
Previous file: linux/net/ipv4/tcp.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.4/linux/net/ipv4/tcp_input.c linux/net/ipv4/tcp_input.c
@@ -5,7 +5,7 @@
  *
  *		Implementation of the Transmission Control Protocol(TCP).
  *
- * Version:	$Id: tcp_input.c,v 1.228 2001/04/20 20:46:19 davem Exp $
+ * Version:	$Id: tcp_input.c,v 1.231 2001/05/22 05:15:16 davem Exp $
  *
  * Authors:	Ross Biro, <bir7@leland.Stanford.Edu>
  *		Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
@@ -2527,12 +2527,12 @@
 	struct tcp_opt *tp = &(sk->tp_pinfo.af_tcp);
 	int eaten = -1;
 
+	if (TCP_SKB_CB(skb)->seq == TCP_SKB_CB(skb)->end_seq)
+		goto drop;
+
 	th = skb->h.th;
 	__skb_pull(skb, th->doff*4);
 
-        if (skb->len == 0 && !th->fin)
-		goto drop;
-
 	TCP_ECN_accept_cwr(tp, skb);
 
 	if (tp->dsack) {
@@ -3711,8 +3711,12 @@
 		queued = tcp_rcv_synsent_state_process(sk, skb, th, len);
 		if (queued >= 0)
 			return queued;
-		queued = 0;
-		goto step6;
+
+		/* Do step6 onward by hand. */
+		tcp_urg(sk, skb, th);
+		__kfree_skb(skb);
+		tcp_data_snd_check(sk);
+		return 0;
 	}
 
 	if (tcp_fast_parse_options(skb, th, tp) && tp->saw_tstamp &&
@@ -3853,7 +3857,6 @@
 	} else
 		goto discard;
 
-step6:
 	/* step 6: check the URG bit */
 	tcp_urg(sk, skb, th);
 

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)