|
@@ -292,6 +292,12 @@ int nf_conntrack_l4proto_register(struct nf_conntrack_l4proto *l4proto)
|
|
|
|
|
|
for (i = 0; i < MAX_NF_CT_PROTO; i++)
|
|
for (i = 0; i < MAX_NF_CT_PROTO; i++)
|
|
proto_array[i] = &nf_conntrack_l4proto_generic;
|
|
proto_array[i] = &nf_conntrack_l4proto_generic;
|
|
|
|
+
|
|
|
|
+ /* Before making proto_array visible to lockless readers,
|
|
|
|
+ * we must make sure its content is committed to memory.
|
|
|
|
+ */
|
|
|
|
+ smp_wmb();
|
|
|
|
+
|
|
nf_ct_protos[l4proto->l3proto] = proto_array;
|
|
nf_ct_protos[l4proto->l3proto] = proto_array;
|
|
} else if (nf_ct_protos[l4proto->l3proto][l4proto->l4proto] !=
|
|
} else if (nf_ct_protos[l4proto->l3proto][l4proto->l4proto] !=
|
|
&nf_conntrack_l4proto_generic) {
|
|
&nf_conntrack_l4proto_generic) {
|