]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
netfilter: nf_conntrack: do not skip entries in /proc/net/nf_conntrack
authorEric Dumazet <edumazet@google.com>
Wed, 24 Sep 2025 07:27:09 +0000 (07:27 +0000)
committerFlorian Westphal <fw@strlen.de>
Wed, 24 Sep 2025 09:50:28 +0000 (11:50 +0200)
ct_seq_show() has an opportunistic garbage collector :

if (nf_ct_should_gc(ct)) {
    nf_ct_kill(ct);
    goto release;
}

So if one nf_conn is killed there, next time ct_get_next() runs,
we skip the following item in the bucket, even if it should have
been displayed if gc did not take place.

We can decrement st->skip_elems to tell ct_get_next() one of the items
was removed from the chain.

Fixes: 58e207e4983d ("netfilter: evict stale entries when user reads /proc/net/nf_conntrack")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Florian Westphal <fw@strlen.de>
net/netfilter/nf_conntrack_standalone.c

index 1f14ef0436c65fccc8e64956a105d5473e21b55e..708b79380f047f32aa8e6047c52c807b4019f2b9 100644 (file)
@@ -317,6 +317,9 @@ static int ct_seq_show(struct seq_file *s, void *v)
        smp_acquire__after_ctrl_dep();
 
        if (nf_ct_should_gc(ct)) {
+               struct ct_iter_state *st = s->private;
+
+               st->skip_elems--;
                nf_ct_kill(ct);
                goto release;
        }