--- x/net/bridge/netfilter/ebtables.c +++ y/net/bridge/netfilter/ebtables.c @@ -652,6 +652,13 @@ ebt_cleanup_watcher(struct ebt_entry_wat return 0; } +static inline int ebt_entry_dryrun(struct ebt_entry *e, struct net *net, unsigned int *cnt) +{ + if (cnt && (*cnt)-- == 0) + return 1; + return 0; +} + static inline int ebt_cleanup_entry(struct ebt_entry *e, struct net *net, unsigned int *cnt) { @@ -1233,6 +1240,10 @@ int ebt_register_table(struct net *net, goto free_chainstack; table->private = newinfo; + ret = EBT_ENTRY_ITERATE(table->private->entries, table->private->entries_size, + ebt_entry_dryrun, net, NULL); + if (ret) + goto free_chainstack; rwlock_init(&table->lock); mutex_lock(&ebt_mutex); list_for_each_entry(t, &ebt_net->tables, list) {