mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 04:31:50 +00:00
tcp: consume incoming skb leading to a reset
Whenever tcp_validate_incoming() handles a valid RST packet, we should not pretend the packet was dropped. Create a special section at the end of tcp_validate_incoming() to handle this case. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7925c2d930
commit
d9d024f966
@ -5700,7 +5700,7 @@ static bool tcp_validate_incoming(struct sock *sk, struct sk_buff *skb,
|
||||
&tp->last_oow_ack_time))
|
||||
tcp_send_dupack(sk, skb);
|
||||
} else if (tcp_reset_check(sk, skb)) {
|
||||
tcp_reset(sk, skb);
|
||||
goto reset;
|
||||
}
|
||||
goto discard;
|
||||
}
|
||||
@ -5736,17 +5736,16 @@ static bool tcp_validate_incoming(struct sock *sk, struct sk_buff *skb,
|
||||
}
|
||||
|
||||
if (rst_seq_match)
|
||||
tcp_reset(sk, skb);
|
||||
else {
|
||||
/* Disable TFO if RST is out-of-order
|
||||
* and no data has been received
|
||||
* for current active TFO socket
|
||||
*/
|
||||
if (tp->syn_fastopen && !tp->data_segs_in &&
|
||||
sk->sk_state == TCP_ESTABLISHED)
|
||||
tcp_fastopen_active_disable(sk);
|
||||
tcp_send_challenge_ack(sk);
|
||||
}
|
||||
goto reset;
|
||||
|
||||
/* Disable TFO if RST is out-of-order
|
||||
* and no data has been received
|
||||
* for current active TFO socket
|
||||
*/
|
||||
if (tp->syn_fastopen && !tp->data_segs_in &&
|
||||
sk->sk_state == TCP_ESTABLISHED)
|
||||
tcp_fastopen_active_disable(sk);
|
||||
tcp_send_challenge_ack(sk);
|
||||
goto discard;
|
||||
}
|
||||
|
||||
@ -5771,6 +5770,11 @@ syn_challenge:
|
||||
discard:
|
||||
tcp_drop(sk, skb);
|
||||
return false;
|
||||
|
||||
reset:
|
||||
tcp_reset(sk, skb);
|
||||
__kfree_skb(skb);
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user