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))
|
&tp->last_oow_ack_time))
|
||||||
tcp_send_dupack(sk, skb);
|
tcp_send_dupack(sk, skb);
|
||||||
} else if (tcp_reset_check(sk, skb)) {
|
} else if (tcp_reset_check(sk, skb)) {
|
||||||
tcp_reset(sk, skb);
|
goto reset;
|
||||||
}
|
}
|
||||||
goto discard;
|
goto discard;
|
||||||
}
|
}
|
||||||
@ -5736,17 +5736,16 @@ static bool tcp_validate_incoming(struct sock *sk, struct sk_buff *skb,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (rst_seq_match)
|
if (rst_seq_match)
|
||||||
tcp_reset(sk, skb);
|
goto reset;
|
||||||
else {
|
|
||||||
/* Disable TFO if RST is out-of-order
|
/* Disable TFO if RST is out-of-order
|
||||||
* and no data has been received
|
* and no data has been received
|
||||||
* for current active TFO socket
|
* for current active TFO socket
|
||||||
*/
|
*/
|
||||||
if (tp->syn_fastopen && !tp->data_segs_in &&
|
if (tp->syn_fastopen && !tp->data_segs_in &&
|
||||||
sk->sk_state == TCP_ESTABLISHED)
|
sk->sk_state == TCP_ESTABLISHED)
|
||||||
tcp_fastopen_active_disable(sk);
|
tcp_fastopen_active_disable(sk);
|
||||||
tcp_send_challenge_ack(sk);
|
tcp_send_challenge_ack(sk);
|
||||||
}
|
|
||||||
goto discard;
|
goto discard;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5771,6 +5770,11 @@ syn_challenge:
|
|||||||
discard:
|
discard:
|
||||||
tcp_drop(sk, skb);
|
tcp_drop(sk, skb);
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
reset:
|
||||||
|
tcp_reset(sk, skb);
|
||||||
|
__kfree_skb(skb);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user