Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cef0acd4 authored by David Spinadel's avatar David Spinadel Committed by Johannes Berg
Browse files

mac80211: Add RX flag to indicate ICV stripped



Add a flag that indicates that the WEP ICV was stripped from an
RX packet, allowing the device to not transfer that if it's
already checked.

Signed-off-by: default avatarDavid Spinadel <david.spinadel@intel.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 93be2b74
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -1017,7 +1017,7 @@ ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info)
 * @RX_FLAG_DECRYPTED: This frame was decrypted in hardware.
 * @RX_FLAG_DECRYPTED: This frame was decrypted in hardware.
 * @RX_FLAG_MMIC_STRIPPED: the Michael MIC is stripped off this frame,
 * @RX_FLAG_MMIC_STRIPPED: the Michael MIC is stripped off this frame,
 *	verification has been done by the hardware.
 *	verification has been done by the hardware.
 * @RX_FLAG_IV_STRIPPED: The IV/ICV are stripped from this frame.
 * @RX_FLAG_IV_STRIPPED: The IV and ICV are stripped from this frame.
 *	If this flag is set, the stack cannot do any replay detection
 *	If this flag is set, the stack cannot do any replay detection
 *	hence the driver or hardware will have to do that.
 *	hence the driver or hardware will have to do that.
 * @RX_FLAG_PN_VALIDATED: Currently only valid for CCMP/GCMP frames, this
 * @RX_FLAG_PN_VALIDATED: Currently only valid for CCMP/GCMP frames, this
@@ -1088,6 +1088,8 @@ ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info)
 * @RX_FLAG_ALLOW_SAME_PN: Allow the same PN as same packet before.
 * @RX_FLAG_ALLOW_SAME_PN: Allow the same PN as same packet before.
 *	This is used for AMSDU subframes which can have the same PN as
 *	This is used for AMSDU subframes which can have the same PN as
 *	the first subframe.
 *	the first subframe.
 * @RX_FLAG_ICV_STRIPPED: The ICV is stripped from this frame. CRC checking must
 *	be done in the hardware.
 */
 */
enum mac80211_rx_flags {
enum mac80211_rx_flags {
	RX_FLAG_MMIC_ERROR		= BIT(0),
	RX_FLAG_MMIC_ERROR		= BIT(0),
@@ -1123,6 +1125,7 @@ enum mac80211_rx_flags {
	RX_FLAG_RADIOTAP_VENDOR_DATA	= BIT(31),
	RX_FLAG_RADIOTAP_VENDOR_DATA	= BIT(31),
	RX_FLAG_MIC_STRIPPED		= BIT_ULL(32),
	RX_FLAG_MIC_STRIPPED		= BIT_ULL(32),
	RX_FLAG_ALLOW_SAME_PN		= BIT_ULL(33),
	RX_FLAG_ALLOW_SAME_PN		= BIT_ULL(33),
	RX_FLAG_ICV_STRIPPED		= BIT_ULL(34),
};
};


#define RX_FLAG_STBC_SHIFT		26
#define RX_FLAG_STBC_SHIFT		26
+2 −1
Original line number Original line Diff line number Diff line
@@ -293,7 +293,8 @@ ieee80211_crypto_wep_decrypt(struct ieee80211_rx_data *rx)
			return RX_DROP_UNUSABLE;
			return RX_DROP_UNUSABLE;
		ieee80211_wep_remove_iv(rx->local, rx->skb, rx->key);
		ieee80211_wep_remove_iv(rx->local, rx->skb, rx->key);
		/* remove ICV */
		/* remove ICV */
		if (pskb_trim(rx->skb, rx->skb->len - IEEE80211_WEP_ICV_LEN))
		if (!(status->flag & RX_FLAG_ICV_STRIPPED) &&
		    pskb_trim(rx->skb, rx->skb->len - IEEE80211_WEP_ICV_LEN))
			return RX_DROP_UNUSABLE;
			return RX_DROP_UNUSABLE;
	}
	}


+2 −1
Original line number Original line Diff line number Diff line
@@ -294,6 +294,7 @@ ieee80211_crypto_tkip_decrypt(struct ieee80211_rx_data *rx)
		return RX_DROP_UNUSABLE;
		return RX_DROP_UNUSABLE;


	/* Trim ICV */
	/* Trim ICV */
	if (!(status->flag & RX_FLAG_ICV_STRIPPED))
		skb_trim(skb, skb->len - IEEE80211_TKIP_ICV_LEN);
		skb_trim(skb, skb->len - IEEE80211_TKIP_ICV_LEN);


	/* Remove IV */
	/* Remove IV */