lkml.org 
[lkml]   [2021]   [Jun]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 020/137] net/sched: act_ct: Fix ct template allocation for zone 0
    Date
    From: Ariel Levkovich <lariel@nvidia.com>

    [ Upstream commit fb91702b743dec78d6507c53a2dec8a8883f509d ]

    Fix current behavior of skipping template allocation in case the
    ct action is in zone 0.

    Skipping the allocation may cause the datapath ct code to ignore the
    entire ct action with all its attributes (commit, nat) in case the ct
    action in zone 0 was preceded by a ct clear action.

    The ct clear action sets the ct_state to untracked and resets the
    skb->_nfct pointer. Under these conditions and without an allocated
    ct template, the skb->_nfct pointer will remain NULL which will
    cause the tc ct action handler to exit without handling commit and nat
    actions, if such exist.

    For example, the following rule in OVS dp:
    recirc_id(0x2),ct_state(+new-est-rel-rpl+trk),ct_label(0/0x1), \
    in_port(eth0),actions:ct_clear,ct(commit,nat(src=10.11.0.12)), \
    recirc(0x37a)

    Will result in act_ct skipping the commit and nat actions in zone 0.

    The change removes the skipping of template allocation for zone 0 and
    treats it the same as any other zone.

    Fixes: b57dc7c13ea9 ("net/sched: Introduce action ct")
    Signed-off-by: Ariel Levkovich <lariel@nvidia.com>
    Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
    Link: https://lore.kernel.org/r/20210526170110.54864-1-lariel@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/sched/act_ct.c | 3 ---
    1 file changed, 3 deletions(-)

    diff --git a/net/sched/act_ct.c b/net/sched/act_ct.c
    index 6376b7b22325..315a5b2f3add 100644
    --- a/net/sched/act_ct.c
    +++ b/net/sched/act_ct.c
    @@ -1199,9 +1199,6 @@ static int tcf_ct_fill_params(struct net *net,
    sizeof(p->zone));
    }

    - if (p->zone == NF_CT_DEFAULT_ZONE_ID)
    - return 0;
    -
    nf_ct_zone_init(&zone, p->zone, NF_CT_DEFAULT_ZONE_DIR, 0);
    tmpl = nf_ct_tmpl_alloc(net, &zone, GFP_KERNEL);
    if (!tmpl) {
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-06-08 20:55    [W:4.335 / U:0.480 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site