lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.16 0380/1039] netfilter: nft_set_pipapo: allocate pcpu scratch maps on clone
    Date
    From: Florian Westphal <fw@strlen.de>

    [ Upstream commit 23c54263efd7cb605e2f7af72717a2a951999217 ]

    This is needed in case a new transaction is made that doesn't insert any
    new elements into an already existing set.

    Else, after second 'nft -f ruleset.txt', lookups in such a set will fail
    because ->lookup() encounters raw_cpu_ptr(m->scratch) == NULL.

    For the initial rule load, insertion of elements takes care of the
    allocation, but for rule reloads this isn't guaranteed: we might not
    have additions to the set.

    Fixes: 3c4287f62044a90e ("nf_tables: Add set type for arbitrary concatenation of ranges")
    Reported-by: etkaar <lists.netfilter.org@prvy.eu>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/netfilter/nft_set_pipapo.c | 8 ++++++++
    1 file changed, 8 insertions(+)

    diff --git a/net/netfilter/nft_set_pipapo.c b/net/netfilter/nft_set_pipapo.c
    index dce866d93feed..2c8051d8cca69 100644
    --- a/net/netfilter/nft_set_pipapo.c
    +++ b/net/netfilter/nft_set_pipapo.c
    @@ -1290,6 +1290,11 @@ static struct nft_pipapo_match *pipapo_clone(struct nft_pipapo_match *old)
    if (!new->scratch_aligned)
    goto out_scratch;
    #endif
    + for_each_possible_cpu(i)
    + *per_cpu_ptr(new->scratch, i) = NULL;
    +
    + if (pipapo_realloc_scratch(new, old->bsize_max))
    + goto out_scratch_realloc;

    rcu_head_init(&new->rcu);

    @@ -1334,6 +1339,9 @@ out_lt:
    kvfree(dst->lt);
    dst--;
    }
    +out_scratch_realloc:
    + for_each_possible_cpu(i)
    + kfree(*per_cpu_ptr(new->scratch, i));
    #ifdef NFT_PIPAPO_ALIGN
    free_percpu(new->scratch_aligned);
    #endif
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-01-24 23:09    [W:3.183 / U:0.280 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site