+ SMP_ALIGN(repl->size) * num_possible_cpus()); 
+ SMP_ALIGN(repl->size) * (highest_possible_processor_id()+1)); 
int arpt_register_table(struct arpt_table *table,			const struct arpt_replace *repl){	int ret;	struct arpt_table_info *newinfo;	static struct arpt_table_info bootstrap		= { 0, 0, 0, { 0 }, { 0 }, { } };	newinfo = vmalloc(sizeof(struct arpt_table_info)			  + SMP_ALIGN(repl->size) * num_possible_cpus());	if (!newinfo) {		ret = -ENOMEM;		return ret;	}	memcpy(newinfo->entries, repl->entries, repl->size);	ret = translate_table(table->name, table->valid_hooks,			      newinfo, repl->size,			      repl->num_entries,			      repl->hook_entry,			      repl->underflow);	duprintf("arpt_register_table: translate table gives %d\n", ret);	if (ret != 0) {		vfree(newinfo);		return ret;	}	ret = down_interruptible(&arpt_mutex);	if (ret != 0) {		vfree(newinfo);		return ret;	}	/* Don't autoload: we'd eat our tail... */	if (list_named_find(&arpt_tables, table->name)) {		ret = -EEXIST;		goto free_unlock;	}	/* Simplifies replace_table code. */	table->private = &bootstrap;	if (!replace_table(table, 0, newinfo, &ret))		goto free_unlock;	duprintf("table->private->number = %u\n",		 table->private->number);		/* save number of initial entries */	table->private->initial_entries = table->private->number;	rwlock_init(&table->lock);	list_prepend(&arpt_tables, table); unlock:	up(&arpt_mutex);	return ret; free_unlock:	vfree(newinfo);	goto unlock;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/c8923c6b852d3a97c1faad0566e38fca330375a7/arp_tables.c/buggy/net/ipv4/netfilter/arp_tables.c