netfilter: nft_set_pipapo: fix null deref for empty set
authorFlorian Westphal <fw@strlen.de>
Mon, 11 Aug 2025 10:26:10 +0000 (12:26 +0200)
committerFlorian Westphal <fw@strlen.de>
Wed, 13 Aug 2025 06:34:32 +0000 (08:34 +0200)
Blamed commit broke the check for a null scratch map:
  -  if (unlikely(!m || !*raw_cpu_ptr(m->scratch)))
  +  if (unlikely(!raw_cpu_ptr(m->scratch)))

This should have been "if (!*raw_ ...)".
Use the pattern of the avx2 version which is more readable.

This can only be reproduced if avx2 support isn't available.

Fixes: d8d871a35ca9 ("netfilter: nft_set_pipapo: merge pipapo_get/lookup")
Signed-off-by: Florian Westphal <fw@strlen.de>
net/netfilter/nft_set_pipapo.c

index 1a19649c28511a208d91fc6f174cd06bd9202057..9a10251228fd5d8e646f99af0766da9e35358aea 100644 (file)
@@ -426,10 +426,9 @@ static struct nft_pipapo_elem *pipapo_get(const struct nft_pipapo_match *m,
 
        local_bh_disable();
 
-       if (unlikely(!raw_cpu_ptr(m->scratch)))
-               goto out;
-
        scratch = *raw_cpu_ptr(m->scratch);
+       if (unlikely(!scratch))
+               goto out;
 
        map_index = scratch->map_index;