]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
netfilter: nf_conncount: update last_gc only when GC has been performed
authorFernando Fernandez Mancera <fmancera@suse.de>
Wed, 17 Dec 2025 14:46:40 +0000 (15:46 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 19 Jan 2026 12:12:10 +0000 (13:12 +0100)
[ Upstream commit 7811ba452402d58628e68faedf38745b3d485e3c ]

Currently last_gc is being updated everytime a new connection is
tracked, that means that it is updated even if a GC wasn't performed.
With a sufficiently high packet rate, it is possible to always bypass
the GC, causing the list to grow infinitely.

Update the last_gc value only when a GC has been actually performed.

Fixes: d265929930e2 ("netfilter: nf_conncount: reduce unnecessary GC")
Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de>
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/netfilter/nf_conncount.c

index c00b8e522c5a72478c31ad3b568547e3e06dae54..a2c5a7ba0c6fce9cc802ed85f5c720e869be78cd 100644 (file)
@@ -229,6 +229,7 @@ static int __nf_conncount_add(struct net *net,
 
                nf_ct_put(found_ct);
        }
+       list->last_gc = (u32)jiffies;
 
 add_new_node:
        if (WARN_ON_ONCE(list->count > INT_MAX)) {
@@ -248,7 +249,6 @@ add_new_node:
        conn->jiffies32 = (u32)jiffies;
        list_add_tail(&conn->node, &list->head);
        list->count++;
-       list->last_gc = (u32)jiffies;
 
 out_put:
        if (refcounted)