summaryrefslogtreecommitdiffstats
path: root/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0117-ath9k_hw-fix-interpretation-of-the-rx-KeyMiss-flag.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0117-ath9k_hw-fix-interpretation-of-the-rx-KeyMiss-flag.patch')
-rw-r--r--recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0117-ath9k_hw-fix-interpretation-of-the-rx-KeyMiss-flag.patch61
1 files changed, 61 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0117-ath9k_hw-fix-interpretation-of-the-rx-KeyMiss-flag.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0117-ath9k_hw-fix-interpretation-of-the-rx-KeyMiss-flag.patch
new file mode 100644
index 00000000..7545566c
--- /dev/null
+++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.2/0117-ath9k_hw-fix-interpretation-of-the-rx-KeyMiss-flag.patch
@@ -0,0 +1,61 @@
1From 6e66c39b4394d812895bbeaa0dce566ca86a7d72 Mon Sep 17 00:00:00 2001
2From: Felix Fietkau <nbd@openwrt.org>
3Date: Sat, 14 Jan 2012 15:08:34 +0100
4Subject: [PATCH 117/130] ath9k_hw: fix interpretation of the rx KeyMiss flag
5
6commit 7a532fe7131216a02c81a6c1b1f8632da1195a58 upstream.
7
8Documentation states that the KeyMiss flag is only valid if RxFrameOK is
9unset, however empirical evidence has shown that this is false.
10When KeyMiss is set (and RxFrameOK is 1), the hardware passes a valid frame
11which has not been decrypted. The driver then falsely marks the frame
12as decrypted, and when using CCMP this corrupts the rx CCMP PN, leading
13to connection hangs.
14
15Signed-off-by: Felix Fietkau <nbd@openwrt.org>
16Signed-off-by: John W. Linville <linville@tuxdriver.com>
17Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
18---
19 drivers/net/wireless/ath/ath9k/ar9003_mac.c | 5 +++--
20 drivers/net/wireless/ath/ath9k/mac.c | 5 +++--
21 2 files changed, 6 insertions(+), 4 deletions(-)
22
23diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mac.c b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
24index ccde784..f5ae3c6 100644
25--- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c
26+++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
27@@ -526,10 +526,11 @@ int ath9k_hw_process_rxdesc_edma(struct ath_hw *ah, struct ath_rx_status *rxs,
28 rxs->rs_status |= ATH9K_RXERR_DECRYPT;
29 else if (rxsp->status11 & AR_MichaelErr)
30 rxs->rs_status |= ATH9K_RXERR_MIC;
31- if (rxsp->status11 & AR_KeyMiss)
32- rxs->rs_status |= ATH9K_RXERR_KEYMISS;
33 }
34
35+ if (rxsp->status11 & AR_KeyMiss)
36+ rxs->rs_status |= ATH9K_RXERR_KEYMISS;
37+
38 return 0;
39 }
40 EXPORT_SYMBOL(ath9k_hw_process_rxdesc_edma);
41diff --git a/drivers/net/wireless/ath/ath9k/mac.c b/drivers/net/wireless/ath/ath9k/mac.c
42index ecdb6fd..bbcb777 100644
43--- a/drivers/net/wireless/ath/ath9k/mac.c
44+++ b/drivers/net/wireless/ath/ath9k/mac.c
45@@ -621,10 +621,11 @@ int ath9k_hw_rxprocdesc(struct ath_hw *ah, struct ath_desc *ds,
46 rs->rs_status |= ATH9K_RXERR_DECRYPT;
47 else if (ads.ds_rxstatus8 & AR_MichaelErr)
48 rs->rs_status |= ATH9K_RXERR_MIC;
49- if (ads.ds_rxstatus8 & AR_KeyMiss)
50- rs->rs_status |= ATH9K_RXERR_KEYMISS;
51 }
52
53+ if (ads.ds_rxstatus8 & AR_KeyMiss)
54+ rs->rs_status |= ATH9K_RXERR_KEYMISS;
55+
56 return 0;
57 }
58 EXPORT_SYMBOL(ath9k_hw_rxprocdesc);
59--
601.7.7.4
61