From nbd@nbd.name Sun Feb 5 15:15:47 2012 Return-path: 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 ) 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 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 Cc: stable@vger.kernel.org Reported-by: Laurent Bonnans Reported-by: Jurica Vukadin --- 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