|
@@ -704,7 +704,10 @@ struct sock *tcp_check_req(struct sock *sk, struct sk_buff *skb,
|
|
if (paws_reject || !tcp_in_window(TCP_SKB_CB(skb)->seq, TCP_SKB_CB(skb)->end_seq,
|
|
if (paws_reject || !tcp_in_window(TCP_SKB_CB(skb)->seq, TCP_SKB_CB(skb)->end_seq,
|
|
tcp_rsk(req)->rcv_nxt, tcp_rsk(req)->rcv_nxt + req->rsk_rcv_wnd)) {
|
|
tcp_rsk(req)->rcv_nxt, tcp_rsk(req)->rcv_nxt + req->rsk_rcv_wnd)) {
|
|
/* Out of window: send ACK and drop. */
|
|
/* Out of window: send ACK and drop. */
|
|
- if (!(flg & TCP_FLAG_RST))
|
|
|
|
|
|
+ if (!(flg & TCP_FLAG_RST) &&
|
|
|
|
+ !tcp_oow_rate_limited(sock_net(sk), skb,
|
|
|
|
+ LINUX_MIB_TCPACKSKIPPEDSYNRECV,
|
|
|
|
+ &tcp_rsk(req)->last_oow_ack_time))
|
|
req->rsk_ops->send_ack(sk, skb, req);
|
|
req->rsk_ops->send_ack(sk, skb, req);
|
|
if (paws_reject)
|
|
if (paws_reject)
|
|
NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_PAWSESTABREJECTED);
|
|
NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_PAWSESTABREJECTED);
|