Eric Dumazet wrote: But it seems we need an extra smp_wmb() after smp_wmb(); table->private = newinfo; Otherwise we have no guarantee other cpus actually see the new ->private value. Suggested-by: Eric Dumazet <edumazet@xxxxxxxxxx> Signed-off-by: Florian Westphal <fw@xxxxxxxxx> --- net/netfilter/x_tables.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c index d8571f414208..64cf669ecd6c 100644 --- a/net/netfilter/x_tables.c +++ b/net/netfilter/x_tables.c @@ -1182,6 +1182,9 @@ xt_replace_table(struct xt_table *table, smp_wmb(); table->private = newinfo; + /* Ensure other cpus see the new ->private value. */ + smp_wmb(); + /* * Even though table entries have now been swapped, other CPU's * may still be using the old entries. This is okay, because -- 2.13.6 -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html