tcp: add drop reasons to tcp_rcv_synsent_state_process()
authorEric Dumazet <edumazet@google.com>
Sat, 16 Apr 2022 00:10:47 +0000 (17:10 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sun, 17 Apr 2022 12:31:31 +0000 (13:31 +0100)
Re-use existing reasons.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_input.c

index cd9f5c39f85a042751ef78132860a2a6cc96bccc..339cc3d40745a0ea2a9f66b03dfda5aa6800d4a2 100644 (file)
@@ -6144,6 +6144,7 @@ static int tcp_rcv_synsent_state_process(struct sock *sk, struct sk_buff *skb,
        struct tcp_fastopen_cookie foc = { .len = -1 };
        int saved_clamp = tp->rx_opt.mss_clamp;
        bool fastopen_fail;
+       SKB_DR(reason);
 
        tcp_parse_options(sock_net(sk), skb, &tp->rx_opt, 0, &foc);
        if (tp->rx_opt.saw_tstamp && tp->rx_opt.rcv_tsecr)
@@ -6198,9 +6199,10 @@ consume:
                 *    See note below!
                 *                                        --ANK(990513)
                 */
-               if (!th->syn)
+               if (!th->syn) {
+                       SKB_DR_SET(reason, TCP_FLAGS);
                        goto discard_and_undo;
-
+               }
                /* rfc793:
                 *   "If the SYN bit is on ...
                 *    are acceptable then ...
@@ -6291,15 +6293,16 @@ consume:
                 *
                 *      Otherwise (no ACK) drop the segment and return."
                 */
-
+               SKB_DR_SET(reason, TCP_RESET);
                goto discard_and_undo;
        }
 
        /* PAWS check. */
        if (tp->rx_opt.ts_recent_stamp && tp->rx_opt.saw_tstamp &&
-           tcp_paws_reject(&tp->rx_opt, 0))
+           tcp_paws_reject(&tp->rx_opt, 0)) {
+               SKB_DR_SET(reason, TCP_RFC7323_PAWS);
                goto discard_and_undo;
-
+       }
        if (th->syn) {
                /* We see SYN without ACK. It is attempt of
                 * simultaneous connect with crossed SYNs.
@@ -6358,7 +6361,7 @@ consume:
 discard_and_undo:
        tcp_clear_options(&tp->rx_opt);
        tp->rx_opt.mss_clamp = saved_clamp;
-       tcp_drop(sk, skb);
+       tcp_drop_reason(sk, skb, reason);
        return 0;
 
 reset_and_undo: