Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ath10k: add mic bytes for pmf management packet

For PMF case, the action,deauth,disassoc management need to encrypt
by hardware, it need to reserve 8 bytes for encryption, otherwise
the packet will be sent out with error format, then PMF case will
fail.

After add the 8 bytes, it will pass the PMF case.

Tested with QCA6174 SDIO with firmware
WLAN.RMH.4.4.1-00005-QCARMSWP-1.

Signed-off-by: Wen Gong <wgong@codeaurora.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>

authored by

Wen Gong and committed by
Kalle Valo
83ac2601 39d170b3

+8
+8
drivers/net/wireless/ath/ath10k/htt_tx.c
··· 1237 1237 struct ath10k *ar = htt->ar; 1238 1238 int res, data_len; 1239 1239 struct htt_cmd_hdr *cmd_hdr; 1240 + struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)msdu->data; 1240 1241 struct htt_data_tx_desc *tx_desc; 1241 1242 struct ath10k_skb_cb *skb_cb = ATH10K_SKB_CB(msdu); 1242 1243 struct sk_buff *tmp_skb; ··· 1247 1246 u8 flags0 = 0; 1248 1247 u16 flags1 = 0; 1249 1248 u16 msdu_id = 0; 1249 + 1250 + if ((ieee80211_is_action(hdr->frame_control) || 1251 + ieee80211_is_deauth(hdr->frame_control) || 1252 + ieee80211_is_disassoc(hdr->frame_control)) && 1253 + ieee80211_has_protected(hdr->frame_control)) { 1254 + skb_put(msdu, IEEE80211_CCMP_MIC_LEN); 1255 + } 1250 1256 1251 1257 data_len = msdu->len; 1252 1258