From: Menglong Dong <imaged...@tencent.com>

Replace tcp_drop() used in tcp_rcv_established() with tcp_drop_reason().
Following drop reasons are added:

SKB_DROP_REASON_TCP_FLAGS

Reviewed-by: Mengen Sun <mengen...@tencent.com>
Reviewed-by: Hao Peng <flyingp...@tencent.com>
Signed-off-by: Menglong Dong <imaged...@tencent.com>
Reviewed-by: Eric Dumazet <eduma...@google.com>
Reviewed-by: David Ahern <dsah...@kernel.org>
Signed-off-by: David S. Miller <da...@davemloft.net>
Acked-by: Nikolay Borisov <nbori...@suse.com>
Signed-off-by: Nikolay Borisov <nikolay.bori...@virtuozzo.com>
---
 include/linux/skbuff.h     | 6 +-----
 include/trace/events/skb.h | 1 +
 net/ipv4/tcp_input.c       | 9 +++++++--
 3 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 700996e9987a..8febe5c6cb47 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -360,11 +360,7 @@ enum skb_drop_reason {
                                         * backlog (see
                                         * LINUX_MIB_TCPBACKLOGDROP)
                                         */
-
-
-
-
-
+       SKB_DROP_REASON_TCP_FLAGS,      /* TCP flags invalid */
 
        SKB_DROP_REASON_MAX,
 };
diff --git a/include/trace/events/skb.h b/include/trace/events/skb.h
index 841d0bfebf73..792e2ff696f7 100644
--- a/include/trace/events/skb.h
+++ b/include/trace/events/skb.h
@@ -32,6 +32,7 @@
           TCP_MD5UNEXPECTED)                                   \
        EM(SKB_DROP_REASON_TCP_MD5FAILURE, TCP_MD5FAILURE)      \
        EM(SKB_DROP_REASON_SOCKET_BACKLOG, SOCKET_BACKLOG)      \
+       EM(SKB_DROP_REASON_TCP_FLAGS, TCP_FLAGS)                \
        EMe(SKB_DROP_REASON_MAX, MAX)
 
 #undef EM
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 09effcf4db7c..7e65ba089bf0 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -5749,6 +5749,7 @@ static bool tcp_validate_incoming(struct sock *sk, struct 
sk_buff *skb,
  */
 void tcp_rcv_established(struct sock *sk, struct sk_buff *skb)
 {
+       enum skb_drop_reason reason = SKB_DROP_REASON_NOT_SPECIFIED;
        const struct tcphdr *th = (const struct tcphdr *)skb->data;
        struct tcp_sock *tp = tcp_sk(sk);
        unsigned int len = skb->len;
@@ -5837,6 +5838,7 @@ void tcp_rcv_established(struct sock *sk, struct sk_buff 
*skb)
                                tp->rcv_rtt_last_tsecr = tp->rx_opt.rcv_tsecr;
                                return;
                        } else { /* Header too small */
+                               reason = SKB_DROP_REASON_PKT_TOO_SMALL;
                                TCP_INC_STATS(sock_net(sk), TCP_MIB_INERRS);
                                goto discard;
                        }
@@ -5892,8 +5894,10 @@ void tcp_rcv_established(struct sock *sk, struct sk_buff 
*skb)
        if (len < (th->doff << 2) || tcp_checksum_complete(skb))
                goto csum_error;
 
-       if (!th->ack && !th->rst && !th->syn)
+       if (!th->ack && !th->rst && !th->syn) {
+               reason = SKB_DROP_REASON_TCP_FLAGS;
                goto discard;
+       }
 
        /*
         *      Standard slow path.
@@ -5919,12 +5923,13 @@ void tcp_rcv_established(struct sock *sk, struct 
sk_buff *skb)
        return;
 
 csum_error:
+       reason = SKB_DROP_REASON_TCP_CSUM;
        trace_tcp_bad_csum(skb);
        TCP_INC_STATS(sock_net(sk), TCP_MIB_CSUMERRORS);
        TCP_INC_STATS(sock_net(sk), TCP_MIB_INERRS);
 
 discard:
-       tcp_drop(sk, skb);
+       tcp_drop_reason(sk, skb, reason);
 }
 EXPORT_SYMBOL(tcp_rcv_established);
 
-- 
2.34.1

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to