netfilter: cttimeout: decouple unlink and free on netns destruction
authorFlorian Westphal <fw@strlen.de>
Mon, 11 Apr 2022 11:01:22 +0000 (13:01 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Fri, 13 May 2022 16:52:16 +0000 (18:52 +0200)
Increment the extid on module removal; this makes sure that even
in extreme cases any old uncofirmed entry that happened to be kept
e.g. on nfnetlink_queue list will not trip over a stale timeout
reference.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/nfnetlink_cttimeout.c

index f366b81..9bc4ebe 100644 (file)
@@ -656,12 +656,24 @@ err_out:
        return ret;
 }
 
+static int untimeout(struct nf_conn *ct, void *timeout)
+{
+       struct nf_conn_timeout *timeout_ext = nf_ct_timeout_find(ct);
+
+       if (timeout_ext)
+               RCU_INIT_POINTER(timeout_ext->timeout, NULL);
+
+       return 0;
+}
+
 static void __exit cttimeout_exit(void)
 {
        nfnetlink_subsys_unregister(&cttimeout_subsys);
 
        unregister_pernet_subsys(&cttimeout_ops);
        RCU_INIT_POINTER(nf_ct_timeout_hook, NULL);
+
+       nf_ct_iterate_destroy(untimeout, NULL);
        synchronize_rcu();
 }