diff options
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r-- | net/ipv4/tcp_input.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index a13692560e63..a28e4db8a952 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -5543,6 +5543,9 @@ slow_path: | |||
5543 | if (len < (th->doff << 2) || tcp_checksum_complete_user(sk, skb)) | 5543 | if (len < (th->doff << 2) || tcp_checksum_complete_user(sk, skb)) |
5544 | goto csum_error; | 5544 | goto csum_error; |
5545 | 5545 | ||
5546 | if (!th->ack) | ||
5547 | goto discard; | ||
5548 | |||
5546 | /* | 5549 | /* |
5547 | * Standard slow path. | 5550 | * Standard slow path. |
5548 | */ | 5551 | */ |
@@ -5551,7 +5554,7 @@ slow_path: | |||
5551 | return 0; | 5554 | return 0; |
5552 | 5555 | ||
5553 | step5: | 5556 | step5: |
5554 | if (th->ack && tcp_ack(sk, skb, FLAG_SLOWPATH) < 0) | 5557 | if (tcp_ack(sk, skb, FLAG_SLOWPATH) < 0) |
5555 | goto discard; | 5558 | goto discard; |
5556 | 5559 | ||
5557 | /* ts_recent update must be made after we are sure that the packet | 5560 | /* 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, | |||
5984 | if (tcp_check_req(sk, skb, req, NULL, true) == NULL) | 5987 | if (tcp_check_req(sk, skb, req, NULL, true) == NULL) |
5985 | goto discard; | 5988 | goto discard; |
5986 | } | 5989 | } |
5990 | |||
5991 | if (!th->ack) | ||
5992 | goto discard; | ||
5993 | |||
5987 | if (!tcp_validate_incoming(sk, skb, th, 0)) | 5994 | if (!tcp_validate_incoming(sk, skb, th, 0)) |
5988 | return 0; | 5995 | return 0; |
5989 | 5996 | ||
5990 | /* step 5: check the ACK field */ | 5997 | /* step 5: check the ACK field */ |
5991 | if (th->ack) { | 5998 | if (true) { |
5992 | int acceptable = tcp_ack(sk, skb, FLAG_SLOWPATH) > 0; | 5999 | int acceptable = tcp_ack(sk, skb, FLAG_SLOWPATH) > 0; |
5993 | 6000 | ||
5994 | switch (sk->sk_state) { | 6001 | switch (sk->sk_state) { |
@@ -6138,8 +6145,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb, | |||
6138 | } | 6145 | } |
6139 | break; | 6146 | break; |
6140 | } | 6147 | } |
6141 | } else | 6148 | } |
6142 | goto discard; | ||
6143 | 6149 | ||
6144 | /* ts_recent update must be made after we are sure that the packet | 6150 | /* ts_recent update must be made after we are sure that the packet |
6145 | * is in window. | 6151 | * is in window. |