ieee80211: fix unaligned access in ieee80211_copy_snap
authorDaniel Drake <dsd@gentoo.org>
Thu, 22 Nov 2007 22:03:42 +0000 (22:03 +0000)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 29 Nov 2007 23:08:47 +0000 (18:08 -0500)
There is no guarantee that data+SNAP_SIZE will reside on an even numbered
address, so doing a 16 bit read will cause an unaligned access in some
situations. Based on a patch from Jun Sun.

Signed-off-by: Daniel Drake <dsd@gentoo.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/ieee80211/ieee80211_tx.c

index a4c3c51..6d06f13 100644 (file)
@@ -144,7 +144,8 @@ static int ieee80211_copy_snap(u8 * data, u16 h_proto)
        snap->oui[1] = oui[1];
        snap->oui[2] = oui[2];
 
-       *(u16 *) (data + SNAP_SIZE) = htons(h_proto);
+       h_proto = htons(h_proto);
+       memcpy(data + SNAP_SIZE, &h_proto, sizeof(u16));
 
        return SNAP_SIZE + sizeof(u16);
 }