[NETFILTER] arp_tables: Fix unaligned accesses.

There are two device string comparison loops in arp_packet_match().
The first one goes byte-by-byte but the second one tries to be
clever and cast the string to a long and compare by longs.

The device name strings in the arp table entries are not guarenteed
to be aligned enough to make this value, so just use byte-by-byte
for both cases.

Based upon a report by <drraid@gmail.com>.

Signed-off-by: David S. Miller <davem@davemloft.net>

+3 -7
+3 -7
net/ipv4/netfilter/arp_tables.c
··· 166 166 return 0; 167 167 } 168 168 169 - for (i = 0, ret = 0; i < IFNAMSIZ/sizeof(unsigned long); i++) { 170 - unsigned long odev; 171 - memcpy(&odev, outdev + i*sizeof(unsigned long), 172 - sizeof(unsigned long)); 173 - ret |= (odev 174 - ^ ((const unsigned long *)arpinfo->outiface)[i]) 175 - & ((const unsigned long *)arpinfo->outiface_mask)[i]; 169 + for (i = 0, ret = 0; i < IFNAMSIZ; i++) { 170 + ret |= (outdev[i] ^ arpinfo->outiface[i]) 171 + & arpinfo->outiface_mask[i]; 176 172 } 177 173 178 174 if (FWINV(ret != 0, ARPT_INV_VIA_OUT)) {