net/sched: act_ct: Fix flow table lookup after ct clear or switching zones
authorPaul Blakey <paulb@nvidia.com>
Thu, 17 Feb 2022 09:30:48 +0000 (11:30 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 18 Feb 2022 11:02:48 +0000 (11:02 +0000)
Flow table lookup is skipped if packet either went through ct clear
action (which set the IP_CT_UNTRACKED flag on the packet), or while
switching zones and there is already a connection associated with
the packet. This will result in no SW offload of the connection,
and the and connection not being removed from flow table with
TCP teardown (fin/rst packet).

To fix the above, remove these unneccary checks in flow
table lookup.

Fixes: 46475bb20f4b ("net/sched: act_ct: Software offload of established flows")
Signed-off-by: Paul Blakey <paulb@nvidia.com>
Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/act_ct.c

index f99247fc64682c2bcfa2e5671c2b8bc4ca637511..33e70d60f0bfb203fa8ad25c9e5d9934d59b60f1 100644 (file)
@@ -533,11 +533,6 @@ static bool tcf_ct_flow_table_lookup(struct tcf_ct_params *p,
        struct nf_conn *ct;
        u8 dir;
 
-       /* Previously seen or loopback */
-       ct = nf_ct_get(skb, &ctinfo);
-       if ((ct && !nf_ct_is_template(ct)) || ctinfo == IP_CT_UNTRACKED)
-               return false;
-
        switch (family) {
        case NFPROTO_IPV4:
                if (!tcf_ct_flow_table_fill_tuple_ipv4(skb, &tuple, &tcph))