for (i = 1; i < num_possible_cpus(); i++) { memcpy(newinfo->entries + SMP_ALIGN(newinfo->size)*i, 
for_each_cpu(i) { if (i == 0) continue; memcpy(newinfo->entries + SMP_ALIGN(newinfo->size) * i, 
static int translate_table(const char *name,			   unsigned int valid_hooks,			   struct arpt_table_info *newinfo,			   unsigned int size,			   unsigned int number,			   const unsigned int *hook_entries,			   const unsigned int *underflows){	unsigned int i;	int ret;	newinfo->size = size;	newinfo->number = number;	/* Init all hooks to impossible value. */	for (i = 0; i < NF_ARP_NUMHOOKS; i++) {		newinfo->hook_entry[i] = 0xFFFFFFFF;		newinfo->underflow[i] = 0xFFFFFFFF;	}	duprintf("translate_table: size %u\n", newinfo->size);	i = 0;	/* Walk through entries, checking offsets. */	ret = ARPT_ENTRY_ITERATE(newinfo->entries, newinfo->size,				 check_entry_size_and_hooks,				 newinfo,				 newinfo->entries,				 newinfo->entries + size,				 hook_entries, underflows, &i);	duprintf("translate_table: ARPT_ENTRY_ITERATE gives %d\n", ret);	if (ret != 0)		return ret;	if (i != number) {		duprintf("translate_table: %u not %u entries\n",			 i, number);		return -EINVAL;	}	/* Check hooks all assigned */	for (i = 0; i < NF_ARP_NUMHOOKS; i++) {		/* Only hooks which are valid */		if (!(valid_hooks & (1 << i)))			continue;		if (newinfo->hook_entry[i] == 0xFFFFFFFF) {			duprintf("Invalid hook entry %u %u\n",				 i, hook_entries[i]);			return -EINVAL;		}		if (newinfo->underflow[i] == 0xFFFFFFFF) {			duprintf("Invalid underflow %u %u\n",				 i, underflows[i]);			return -EINVAL;		}	}	if (!mark_source_chains(newinfo, valid_hooks)) {		duprintf("Looping hook\n");		return -ELOOP;	}	/* Finally, each sanity check must pass */	i = 0;	ret = ARPT_ENTRY_ITERATE(newinfo->entries, newinfo->size,				 check_entry, name, size, &i);	if (ret != 0) {		ARPT_ENTRY_ITERATE(newinfo->entries, newinfo->size,				   cleanup_entry, &i);		return ret;	}	/* And one copy for every other CPU */	for (i = 1; i < num_possible_cpus(); i++) {		memcpy(newinfo->entries + SMP_ALIGN(newinfo->size)*i,		       newinfo->entries,		       SMP_ALIGN(newinfo->size));	}	return ret;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/c8923c6b852d3a97c1faad0566e38fca330375a7/arp_tables.c/buggy/net/ipv4/netfilter/arp_tables.c