|
@@ -5543,6 +5543,9 @@ slow_path:
|
|
|
if (len < (th->doff << 2) || tcp_checksum_complete_user(sk, skb))
|
|
|
goto csum_error;
|
|
|
|
|
|
+ if (!th->ack)
|
|
|
+ goto discard;
|
|
|
+
|
|
|
/*
|
|
|
* Standard slow path.
|
|
|
*/
|
|
@@ -5551,7 +5554,7 @@ slow_path:
|
|
|
return 0;
|
|
|
|
|
|
step5:
|
|
|
- if (th->ack && tcp_ack(sk, skb, FLAG_SLOWPATH) < 0)
|
|
|
+ if (tcp_ack(sk, skb, FLAG_SLOWPATH) < 0)
|
|
|
goto discard;
|
|
|
|
|
|
/* ts_recent update must be made after we are sure that the packet
|
|
@@ -5984,11 +5987,15 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
|
|
|
if (tcp_check_req(sk, skb, req, NULL, true) == NULL)
|
|
|
goto discard;
|
|
|
}
|
|
|
+
|
|
|
+ if (!th->ack)
|
|
|
+ goto discard;
|
|
|
+
|
|
|
if (!tcp_validate_incoming(sk, skb, th, 0))
|
|
|
return 0;
|
|
|
|
|
|
/* step 5: check the ACK field */
|
|
|
- if (th->ack) {
|
|
|
+ if (true) {
|
|
|
int acceptable = tcp_ack(sk, skb, FLAG_SLOWPATH) > 0;
|
|
|
|
|
|
switch (sk->sk_state) {
|
|
@@ -6138,8 +6145,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
- } else
|
|
|
- goto discard;
|
|
|
+ }
|
|
|
|
|
|
/* ts_recent update must be made after we are sure that the packet
|
|
|
* is in window.
|