mac80211 : fix unaligned rx skb
authormatthieu castet <castet.matthieu@free.fr>
Thu, 4 Jun 2009 20:16:18 +0000 (22:16 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 10 Jun 2009 17:27:53 +0000 (13:27 -0400)
mac80211 is checking is the skb is aligned on 32 bit boundary.
But it is checking against ethernet header, whereas Linux expect IP
header aligned.  And ethernet ether size is 6*2+2=14, so aligning
ethernet header make IP header unaligned.

Signed-off-by: Matthieu CASTET <castet.matthieu@free.fr>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/rx.c

index 6a9b8e6..7541251 100644 (file)
@@ -1335,7 +1335,7 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
                 * mac80211. That also explains the __skb_push()
                 * below.
                 */
-               align = (unsigned long)skb->data & 3;
+               align = ((unsigned long)(skb->data + sizeof(struct ethhdr))) & 3;
                if (align) {
                        if (WARN_ON(skb_headroom(skb) < 3)) {
                                dev_kfree_skb(skb);