--- x/net/bridge/netfilter/ebtables.c +++ y/net/bridge/netfilter/ebtables.c @@ -1189,7 +1189,7 @@ int ebt_register_table(struct net *net, void *p; if (input_table == NULL || (repl = input_table->table) == NULL || - repl->entries == NULL || repl->entries_size == 0 || + repl->entries == NULL || repl->entries_size < sizeof(struct ebt_entry) || repl->counters != NULL || input_table->private != NULL) return -EINVAL; @@ -1206,7 +1206,7 @@ int ebt_register_table(struct net *net, if (!newinfo) goto free_table; - p = vmalloc(repl->entries_size); + p = vmalloc(repl->entries_size + 16); if (!p) goto free_newinfo;