All of lore.kernel.org
 help / color / mirror / Atom feed
From: Luca Coelho <luca@coelho.fi>
To: kvalo@kernel.org
Cc: luca@coelho.fi, linux-wireless@vger.kernel.org
Subject: [PATCH 08/12] iwlwifi: mvm: Fix calculation of frame length
Date: Sun, 19 Dec 2021 12:18:16 +0200	[thread overview]
Message-ID: <iwlwifi.20211219121514.098be12c801e.I1d81733d8a75b84c3b20eb6e0d14ab3405ca6a86@changeid> (raw)
In-Reply-To: <20211219101820.85153-1-luca@coelho.fi>

From: Ilan Peer <ilan.peer@intel.com>

The RADA might include in the Rx frame the MIC and CRC bytes.
These bytes should be removed for non monitor interfaces and
should not be passed to mac80211.

Fix the Rx processing to remove the extra bytes on non monitor
cases.

Signed-off-by: Ilan Peer <ilan.peer@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
---
 drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c | 27 +++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c
index 5f73717f2f5f..c8b20f202627 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c
@@ -121,12 +121,39 @@ static int iwl_mvm_create_skb(struct iwl_mvm *mvm, struct sk_buff *skb,
 	struct iwl_rx_mpdu_desc *desc = (void *)pkt->data;
 	unsigned int headlen, fraglen, pad_len = 0;
 	unsigned int hdrlen = ieee80211_hdrlen(hdr->frame_control);
+	u8 mic_crc_len = u8_get_bits(desc->mac_flags1,
+				     IWL_RX_MPDU_MFLG1_MIC_CRC_LEN_MASK) << 1;
 
 	if (desc->mac_flags2 & IWL_RX_MPDU_MFLG2_PAD) {
 		len -= 2;
 		pad_len = 2;
 	}
 
+	/*
+	 * For non monitor interface strip the bytes the RADA might not have
+	 * removed. As monitor interface cannot exist with other interfaces
+	 * this removal is safe.
+	 */
+	if (mic_crc_len && !ieee80211_hw_check(mvm->hw, RX_INCLUDES_FCS)) {
+		u32 pkt_flags = le32_to_cpu(pkt->len_n_flags);
+
+		/*
+		 * If RADA was not enabled then decryption was not performed so
+		 * the MIC cannot be removed.
+		 */
+		if (!(pkt_flags & FH_RSCSR_RADA_EN)) {
+			if (WARN_ON(crypt_len > mic_crc_len))
+				return -EINVAL;
+
+			mic_crc_len -= crypt_len;
+		}
+
+		if (WARN_ON(mic_crc_len > len))
+			return -EINVAL;
+
+		len -= mic_crc_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
 	 * an additional 8 bytes for SNAP/ethertype, see below) so that
-- 
2.34.1


  parent reply	other threads:[~2021-12-19 10:18 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-19 10:18 [PATCH 00/12] iwlwifi: updates intended for v5.17 2021-12-19 part 1 Luca Coelho
2021-12-19 10:18 ` [PATCH 01/12] iwlwifi: mvm: use a define for checksum flags mask Luca Coelho
2021-12-19 10:18 ` [PATCH 02/12] iwlwifi: mvm: handle RX checksum on Bz devices Luca Coelho
2021-12-19 10:18 ` [PATCH 03/12] iwlwifi: mvm: don't trust hardware queue number Luca Coelho
2021-12-19 10:18 ` [PATCH 04/12] iwlwifi: mvm: change old-SN drop threshold Luca Coelho
2021-12-19 10:18 ` [PATCH 05/12] iwlwifi: yoyo: support TLV-based firmware reset Luca Coelho
2021-12-19 10:18 ` [PATCH 06/12] iwlwifi: don't pass actual WGDS revision number in table_revision Luca Coelho
2021-12-19 10:18 ` [PATCH 07/12] iwlwifi: mvm: test roc running status bits before removing the sta Luca Coelho
2021-12-19 10:18 ` Luca Coelho [this message]
2021-12-19 10:18 ` [PATCH 09/12] iwlwifi: bump FW API to 69 for AX devices Luca Coelho
2021-12-19 10:18 ` [PATCH 10/12] iwlwifi: mvm: always store the PPAG table as the latest version Luca Coelho
2021-12-19 10:18 ` [PATCH 11/12] iwlwifi: mvm: correctly set channel flags Luca Coelho
2021-12-19 10:18 ` [PATCH 12/12] iwlwifi: mvm: perform 6GHz passive scan after suspend Luca Coelho

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=iwlwifi.20211219121514.098be12c801e.I1d81733d8a75b84c3b20eb6e0d14ab3405ca6a86@changeid \
    --to=luca@coelho.fi \
    --cc=kvalo@kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.