kernel/ath9k-fix-a-WEP-crypto-rela...

67 lines
2.3 KiB
Diff
Raw Normal View History

From nbd@nbd.name Sun Feb 5 15:15:47 2012
Return-path: <nbd@nbd.name>
Envelope-to: linville@tuxdriver.com
Delivery-date: Sun, 05 Feb 2012 15:15:47 -0500
Received: from [2a01:4f8:131:30e2::2] (helo=nbd.name)
by smtp.tuxdriver.com with esmtps (TLSv1:AES256-SHA:256)
(Exim 4.63)
(envelope-from <nbd@nbd.name>)
id 1Ru8Um-0004mD-I2
for linville@tuxdriver.com; Sun, 05 Feb 2012 15:15:47 -0500
Received: by nf.local (Postfix, from userid 501)
id 12D0F5BDE1DC; Sun, 5 Feb 2012 21:15:18 +0100 (CET)
From: Felix Fietkau <nbd@openwrt.org>
To: linux-wireless@vger.kernel.org
Cc: linville@tuxdriver.com,
mcgrof@qca.qualcomm.com,
mohammed@qca.qualcomm.com
Subject: [PATCH 3.3 1/2] ath9k: fix a WEP crypto related regression
Date: Sun, 5 Feb 2012 21:15:17 +0100
Message-Id: <1328472918-30012-1-git-send-email-nbd@openwrt.org>
X-Mailer: git-send-email 1.7.3.2
X-Spam-Score: -1.1 (-)
X-Spam-Status: No
Status: RO
Content-Length: 1381
Lines: 38
commit b4a82a0 "ath9k_hw: fix interpretation of the rx KeyMiss flag"
fixed the interpretation of the KeyMiss flag for keycache based lookups,
however WEP encryption uses a static index, so KeyMiss is always asserted
for it, even though frames are decrypted properly.
Fix this by clearing the ATH9K_RXERR_KEYMISS flag if no keycache based
lookup was performed.
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Cc: stable@vger.kernel.org
Reported-by: Laurent Bonnans <bonnans.l@gmail.com>
Reported-by: Jurica Vukadin <u.ra604@googlemail.com>
---
drivers/net/wireless/ath/ath9k/recv.c | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c
index 0e666fb..7e1a91a 100644
--- a/drivers/net/wireless/ath/ath9k/recv.c
+++ b/drivers/net/wireless/ath/ath9k/recv.c
@@ -822,6 +822,14 @@ static bool ath9k_rx_accept(struct ath_common *common,
(ATH9K_RXERR_DECRYPT | ATH9K_RXERR_CRC | ATH9K_RXERR_MIC |
ATH9K_RXERR_KEYMISS));
+ /*
+ * Key miss events are only relevant for pairwise keys where the
+ * descriptor does contain a valid key index. This has been observed
+ * mostly with CCMP encryption.
+ */
+ if (rx_stats->rs_keyix == ATH9K_RXKEYIX_INVALID)
+ rx_stats->rs_status &= ~ATH9K_RXERR_KEYMISS;
+
if (!rx_stats->rs_datalen)
return false;
/*
--
1.7.3.2