The iteration needs to happen in the right location, 
__nf_ct_l4proto_unregister_one().

Currently its in nf_ct_l4proto_unregister which will only consider first
protocol in the array whereas nf_ct_l4proto_unregister_one() leaves
conntracks added by to-be-removed tracker behind.

Fixes: 2c41f33c1b703 ("netfilter: move table iteration out of netns exit paths")
Signed-off-by: Florian Westphal <[email protected]>
---
 net/netfilter/nf_conntrack_proto.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/net/netfilter/nf_conntrack_proto.c 
b/net/netfilter/nf_conntrack_proto.c
index d88841fbc560..50b1d1e7c7e7 100644
--- a/net/netfilter/nf_conntrack_proto.c
+++ b/net/netfilter/nf_conntrack_proto.c
@@ -474,6 +474,10 @@ static void __nf_ct_l4proto_unregister_one(const struct 
nf_conntrack_l4proto *l4
                        ) != l4proto);
        rcu_assign_pointer(nf_ct_protos[l4proto->l3proto][l4proto->l4proto],
                           &nf_conntrack_l4proto_generic);
+
+       synchronize_net();
+       /* Remove all contrack entries for this protocol */
+       nf_ct_iterate_destroy(kill_l4proto, (void *)l4proto);
 }
 
 void nf_ct_l4proto_unregister_one(const struct nf_conntrack_l4proto *l4proto)
@@ -481,8 +485,6 @@ void nf_ct_l4proto_unregister_one(const struct 
nf_conntrack_l4proto *l4proto)
        mutex_lock(&nf_ct_proto_mutex);
        __nf_ct_l4proto_unregister_one(l4proto);
        mutex_unlock(&nf_ct_proto_mutex);
-
-       synchronize_rcu();
 }
 EXPORT_SYMBOL_GPL(nf_ct_l4proto_unregister_one);
 
@@ -549,10 +551,6 @@ void nf_ct_l4proto_unregister(const struct 
nf_conntrack_l4proto * const l4proto[
        while (num_proto-- != 0)
                __nf_ct_l4proto_unregister_one(l4proto[num_proto]);
        mutex_unlock(&nf_ct_proto_mutex);
-
-       synchronize_net();
-       /* Remove all contrack entries for this protocol */
-       nf_ct_iterate_destroy(kill_l4proto, (void *)l4proto);
 }
 EXPORT_SYMBOL_GPL(nf_ct_l4proto_unregister);
 
-- 
2.16.4

--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to