]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
netfilter: ipset: fix list type element drift bug
authorFlorian Westphal <fw@strlen.de>
Thu, 6 Aug 2026 13:53:41 +0000 (15:53 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 10 Aug 2026 18:28:15 +0000 (20:28 +0200)
If list_set_uadd() calls list_set_replace() to swap an expired entry,
the element count remains the same, therefore the increment must be elided.

Fixes: 702b71e7c666 ("netfilter: ipset: Add element count to all set types header")
Link: https://sashiko.dev/#/patchset/20260806101947.2802-1-fw%40strlen.de
Signed-off-by: Florian Westphal <fw@strlen.de>
Acked-by: Jozsef Kadlecsik <kadlec@netfilter.org>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/ipset/ip_set_list_set.c

index ca3ef9479e838d80e714d0d46f1f73ac83c42462..0bc2370773af3c233a39849acbe19fe75660d2d4 100644 (file)
@@ -301,9 +301,12 @@ list_set_uadd(struct ip_set *set, void *value, const struct ip_set_ext *ext,
        e->set = set;
        INIT_LIST_HEAD(&e->list);
        list_set_init_extensions(set, ext, e);
-       if (n)
+       if (n) {
                list_set_replace(set, e, n);
-       else if (next)
+               return 0;
+       }
+
+       if (next)
                list_add_tail_rcu(&e->list, &next->list);
        else if (prev)
                list_add_rcu(&e->list, &prev->list);