|
@@ -151,17 +151,9 @@ static void iwl_mvm_create_skb(struct sk_buff *skb, struct ieee80211_hdr *hdr,
|
|
|
unsigned int hdrlen = ieee80211_hdrlen(hdr->frame_control);
|
|
|
|
|
|
if (desc->mac_flags2 & IWL_RX_MPDU_MFLG2_PAD) {
|
|
|
+ len -= 2;
|
|
|
pad_len = 2;
|
|
|
-
|
|
|
- /*
|
|
|
- * If the device inserted padding it means that (it thought)
|
|
|
- * the 802.11 header wasn't a multiple of 4 bytes long. In
|
|
|
- * this case, reserve two bytes at the start of the SKB to
|
|
|
- * align the payload properly in case we end up copying it.
|
|
|
- */
|
|
|
- skb_reserve(skb, pad_len);
|
|
|
}
|
|
|
- len -= pad_len;
|
|
|
|
|
|
/* If frame is small enough to fit in skb->head, pull it completely.
|
|
|
* If not, only pull ieee80211_hdr (including crypto if present, and
|
|
@@ -866,6 +858,16 @@ void iwl_mvm_rx_mpdu_mq(struct iwl_mvm *mvm, struct napi_struct *napi,
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ if (desc->mac_flags2 & IWL_RX_MPDU_MFLG2_PAD) {
|
|
|
+ /*
|
|
|
+ * If the device inserted padding it means that (it thought)
|
|
|
+ * the 802.11 header wasn't a multiple of 4 bytes long. In
|
|
|
+ * this case, reserve two bytes at the start of the SKB to
|
|
|
+ * align the payload properly in case we end up copying it.
|
|
|
+ */
|
|
|
+ skb_reserve(skb, 2);
|
|
|
+ }
|
|
|
+
|
|
|
rx_status = IEEE80211_SKB_RXCB(skb);
|
|
|
|
|
|
if (iwl_mvm_rx_crypto(mvm, hdr, rx_status, desc,
|