summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ralink/rt2x00/rt2800usb.c
diff options
context:
space:
mode:
authorMichael Skeffington2017-08-07 18:47:36 +0200
committerKalle Valo2017-08-08 13:53:36 +0200
commit2db3aaba0a9fc769435477059c1224c439061752 (patch)
treecf95b16eddda9d9c30f35faa973a2ce934d1157d /drivers/net/wireless/ralink/rt2x00/rt2800usb.c
parentrtlwifi: constify rate_control_ops structure (diff)
downloadkernel-qcow2-linux-2db3aaba0a9fc769435477059c1224c439061752.tar.gz
kernel-qcow2-linux-2db3aaba0a9fc769435477059c1224c439061752.tar.xz
kernel-qcow2-linux-2db3aaba0a9fc769435477059c1224c439061752.zip
rt2x00: Fix MMIC Countermeasures
Set RX_FLAG_DECRYPTED in case of MMIC failure so that ieee80211_rx_h_decrypt() doesnt drop the frame before getting to ieee80211_rx_h_michael_mic_verify(). Signed-off-by: Michael Skeffington <mike@astro.ai> Acked-by: Stanislaw Gruszka <sgruszka@redhat.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/ralink/rt2x00/rt2800usb.c')
-rw-r--r--drivers/net/wireless/ralink/rt2x00/rt2800usb.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800usb.c b/drivers/net/wireless/ralink/rt2x00/rt2800usb.c
index 685b8e0cd67d..3e5d3a40d986 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2800usb.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800usb.c
@@ -697,11 +697,20 @@ static void rt2800usb_fill_rxdone(struct queue_entry *entry,
* stripped it from the frame. Signal this to mac80211.
*/
rxdesc->flags |= RX_FLAG_MMIC_STRIPPED;
-
- if (rxdesc->cipher_status == RX_CRYPTO_SUCCESS)
+
+ if (rxdesc->cipher_status == RX_CRYPTO_SUCCESS) {
+ rxdesc->flags |= RX_FLAG_DECRYPTED;
+ } else if (rxdesc->cipher_status == RX_CRYPTO_FAIL_MIC) {
+ /*
+ * In order to check the Michael Mic, the packet must have
+ * been decrypted. Mac80211 doesnt check the MMIC failure
+ * flag to initiate MMIC countermeasures if the decoded flag
+ * has not been set.
+ */
rxdesc->flags |= RX_FLAG_DECRYPTED;
- else if (rxdesc->cipher_status == RX_CRYPTO_FAIL_MIC)
+
rxdesc->flags |= RX_FLAG_MMIC_ERROR;
+ }
}
if (rt2x00_get_field32(word, RXD_W0_MY_BSS))