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

Commit dc1580dd authored by Johannes Berg's avatar Johannes Berg Committed by John W. Linville
Browse files

mac80211: remove unused status flag checks



The decryption code verifies whether or not
a given frame was decrypted and verified by
hardware. This is unnecessary, as the crypto
RX handler already does it long before the
decryption code is even invoked, so remove
that code to avoid confusion.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 60ae0f20
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -899,6 +899,9 @@ ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)

	if (!is_multicast_ether_addr(hdr->addr1) && stakey) {
		rx->key = stakey;
		if ((status->flag & RX_FLAG_DECRYPTED) &&
		    (status->flag & RX_FLAG_IV_STRIPPED))
			return RX_CONTINUE;
		/* Skip decryption if the frame is not protected. */
		if (!ieee80211_has_protected(fc))
			return RX_CONTINUE;
+6 −20
Original line number Diff line number Diff line
@@ -221,19 +221,13 @@ ieee80211_crypto_tkip_decrypt(struct ieee80211_rx_data *rx)
	if (!rx->sta || skb->len - hdrlen < 12)
		return RX_DROP_UNUSABLE;

	if (status->flag & RX_FLAG_DECRYPTED) {
		if (status->flag & RX_FLAG_IV_STRIPPED) {
	/*
			 * Hardware took care of all processing, including
			 * replay protection, and stripped the ICV/IV so
			 * we cannot do any checks here.
	 * Let TKIP code verify IV, but skip decryption.
	 * In the case where hardware checks the IV as well,
	 * we don't even get here, see ieee80211_rx_h_decrypt()
	 */
			return RX_CONTINUE;
		}

		/* let TKIP code verify IV, but skip decryption */
	if (status->flag & RX_FLAG_DECRYPTED)
		hwaccel = 1;
	}

	res = ieee80211_tkip_decrypt_data(rx->local->wep_rx_tfm,
					  key, skb->data + hdrlen,
@@ -447,10 +441,6 @@ ieee80211_crypto_ccmp_decrypt(struct ieee80211_rx_data *rx)
	if (!rx->sta || data_len < 0)
		return RX_DROP_UNUSABLE;

	if ((status->flag & RX_FLAG_DECRYPTED) &&
	    (status->flag & RX_FLAG_IV_STRIPPED))
		return RX_CONTINUE;

	ccmp_hdr2pn(pn, skb->data + hdrlen);

	queue = ieee80211_is_mgmt(hdr->frame_control) ?
@@ -564,10 +554,6 @@ ieee80211_crypto_aes_cmac_decrypt(struct ieee80211_rx_data *rx)
	if (!ieee80211_is_mgmt(hdr->frame_control))
		return RX_CONTINUE;

	if ((status->flag & RX_FLAG_DECRYPTED) &&
	    (status->flag & RX_FLAG_IV_STRIPPED))
		return RX_CONTINUE;

	if (skb->len < 24 + sizeof(*mmie))
		return RX_DROP_UNUSABLE;