mac80211: correct header length calculation
authorFred Chou <fred.chou.nd@gmail.com>
Tue, 20 Jan 2015 02:17:27 +0000 (10:17 +0800)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 23 Jan 2015 09:52:48 +0000 (10:52 +0100)
HT Control field may also be present in management frames, as defined
in 8.2.4.1.10 of 802.11-2012. Account for this in calculation of header
length.

Signed-off-by: Fred Chou <fred.chou.nd@gmail.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/wireless/util.c

index d0ac795..5488c36 100644 (file)
@@ -308,6 +308,12 @@ unsigned int __attribute_const__ ieee80211_hdrlen(__le16 fc)
                goto out;
        }
 
+       if (ieee80211_is_mgmt(fc)) {
+               if (ieee80211_has_order(fc))
+                       hdrlen += IEEE80211_HT_CTL_LEN;
+               goto out;
+       }
+
        if (ieee80211_is_ctl(fc)) {
                /*
                 * ACK and CTS are 10 bytes, all others 16. To see how