+@@ -838,6 +841,11 @@ static bool ath9k_rx_accept(struct ath_c
+ if (rx_stats->rs_more)
+ return true;
+
++ mic_error = is_valid_tkip && !ieee80211_is_ctl(fc) &&
++ !ieee80211_has_morefrags(fc) &&
++ !(le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_FRAG) &&
++ (rx_stats->rs_status & ATH9K_RXERR_MIC);
++
+ /*
+ * The rx_stats->rs_status will not be set until the end of the
+ * chained descriptors so it can be ignored if rs_more is set. The
+@@ -845,30 +853,18 @@ static bool ath9k_rx_accept(struct ath_c
+ * descriptors.
+ */
+ if (rx_stats->rs_status != 0) {
+- if (rx_stats->rs_status & ATH9K_RXERR_CRC)
++ if (rx_stats->rs_status & ATH9K_RXERR_CRC) {
+ rxs->flag |= RX_FLAG_FAILED_FCS_CRC;
++ mic_error = false;
++ }