Skip to content

Commit a11a791

Browse files
edumazetkuba-moo
authored andcommitted
tcp: add four drop reasons to tcp_check_req()
Use two existing drop reasons in tcp_check_req(): - TCP_RFC7323_PAWS - TCP_OVERWINDOW Add two new ones: - TCP_RFC7323_TSECR (corresponds to LINUX_MIB_TSECRREJECTED) - TCP_LISTEN_OVERFLOW (when a listener accept queue is full) Signed-off-by: Eric Dumazet <[email protected]> Reviewed-by: Jason Xing <[email protected]> Reviewed-by: Kuniyuki Iwashima <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent e34100c commit a11a791

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

include/net/dropreason-core.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
FN(TCP_OFOMERGE) \
4141
FN(TCP_RFC7323_PAWS) \
4242
FN(TCP_RFC7323_PAWS_ACK) \
43+
FN(TCP_RFC7323_TSECR) \
44+
FN(TCP_LISTEN_OVERFLOW) \
4345
FN(TCP_OLD_SEQUENCE) \
4446
FN(TCP_INVALID_SEQUENCE) \
4547
FN(TCP_INVALID_ACK_SEQUENCE) \
@@ -281,6 +283,13 @@ enum skb_drop_reason {
281283
* Corresponds to LINUX_MIB_PAWS_OLD_ACK.
282284
*/
283285
SKB_DROP_REASON_TCP_RFC7323_PAWS_ACK,
286+
/**
287+
* @SKB_DROP_REASON_TCP_RFC7323_TSECR: PAWS check, invalid TSEcr.
288+
* Corresponds to LINUX_MIB_TSECRREJECTED.
289+
*/
290+
SKB_DROP_REASON_TCP_RFC7323_TSECR,
291+
/** @SKB_DROP_REASON_TCP_LISTEN_OVERFLOW: listener queue full. */
292+
SKB_DROP_REASON_TCP_LISTEN_OVERFLOW,
284293
/** @SKB_DROP_REASON_TCP_OLD_SEQUENCE: Old SEQ field (duplicate packet) */
285294
SKB_DROP_REASON_TCP_OLD_SEQUENCE,
286295
/** @SKB_DROP_REASON_TCP_INVALID_SEQUENCE: Not acceptable SEQ field */

net/ipv4/tcp_minisocks.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -809,10 +809,15 @@ struct sock *tcp_check_req(struct sock *sk, struct sk_buff *skb,
809809
LINUX_MIB_TCPACKSKIPPEDSYNRECV,
810810
&tcp_rsk(req)->last_oow_ack_time))
811811
req->rsk_ops->send_ack(sk, skb, req);
812-
if (paws_reject)
812+
if (paws_reject) {
813+
SKB_DR_SET(*drop_reason, TCP_RFC7323_PAWS);
813814
NET_INC_STATS(sock_net(sk), LINUX_MIB_PAWSESTABREJECTED);
814-
else if (tsecr_reject)
815+
} else if (tsecr_reject) {
816+
SKB_DR_SET(*drop_reason, TCP_RFC7323_TSECR);
815817
NET_INC_STATS(sock_net(sk), LINUX_MIB_TSECRREJECTED);
818+
} else {
819+
SKB_DR_SET(*drop_reason, TCP_OVERWINDOW);
820+
}
816821
return NULL;
817822
}
818823

@@ -882,6 +887,7 @@ struct sock *tcp_check_req(struct sock *sk, struct sk_buff *skb,
882887
return inet_csk_complete_hashdance(sk, child, req, own_req);
883888

884889
listen_overflow:
890+
SKB_DR_SET(*drop_reason, TCP_LISTEN_OVERFLOW);
885891
if (sk != req->rsk_listener)
886892
__NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPMIGRATEREQFAILURE);
887893

0 commit comments

Comments
 (0)