From 1c4f34be2ee3053db0d977a9bf272b4f54434483 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Thu, 11 Dec 2008 18:22:13 +0200 Subject: [PATCH] --- yaml --- r: 122685 b: refs/heads/master c: 9c5f89b3f6580cca21dca4ede940900c5b3c3a81 h: refs/heads/master i: 122683: 7cf46649d78baa7e723cf1a7aef792cf494f3f4b v: v3 --- [refs] | 2 +- trunk/drivers/net/wireless/ath9k/recv.c | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 66ccb8cbdc82..9f139d4a16fb 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f2f1ba253d970479343f97c4620e16842c695d03 +refs/heads/master: 9c5f89b3f6580cca21dca4ede940900c5b3c3a81 diff --git a/trunk/drivers/net/wireless/ath9k/recv.c b/trunk/drivers/net/wireless/ath9k/recv.c index cb449f0b4171..f2327d8e9c28 100644 --- a/trunk/drivers/net/wireless/ath9k/recv.c +++ b/trunk/drivers/net/wireless/ath9k/recv.c @@ -571,8 +571,16 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush) hdr = (struct ieee80211_hdr *)skb->data; hdrlen = ieee80211_get_hdrlen_from_skb(skb); - if (hdrlen & 3) { - padsize = hdrlen % 4; + /* The MAC header is padded to have 32-bit boundary if the + * packet payload is non-zero. The general calculation for + * padsize would take into account odd header lengths: + * padsize = (4 - hdrlen % 4) % 4; However, since only + * even-length headers are used, padding can only be 0 or 2 + * bytes and we can optimize this a bit. In addition, we must + * not try to remove padding from short control frames that do + * not have payload. */ + padsize = hdrlen & 3; + if (padsize && hdrlen >= 24) { memmove(skb->data + padsize, skb->data, hdrlen); skb_pull(skb, padsize); }