gdb: add dependency to libexpat when present
[openwrt.git] / package / mac80211 / patches / 550-ath9k_mmic_verify.patch
index 053d543..a6b2502 100644 (file)
        if (!rx_stats->rs_datalen)
                return false;
          /*
-@@ -850,25 +853,9 @@ static bool ath9k_rx_accept(struct ath_c
+@@ -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;
++              }
                if (rx_stats->rs_status & ATH9K_RXERR_PHY)
                        return false;
  
--              if (rx_stats->rs_status & ATH9K_RXERR_DECRYPT) {
-+              if (rx_stats->rs_status & ATH9K_RXERR_DECRYPT)
+               if (rx_stats->rs_status & ATH9K_RXERR_DECRYPT) {
                        *decrypt_error = true;
 -              } else if (rx_stats->rs_status & ATH9K_RXERR_MIC) {
 -                      bool is_mc;
@@ -39,7 +58,7 @@
 -                       * decrypted using a valid TKIP key.
 -                       */
 -                      is_mc = !!is_multicast_ether_addr(hdr->addr1);
+-
 -                      if (!ieee80211_is_ctl(fc) &&
 -                          !ieee80211_has_morefrags(fc) &&
 -                          !(le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_FRAG) &&
 -                              rxs->flag |= RX_FLAG_MMIC_ERROR;
 -                      else
 -                              rx_stats->rs_status &= ~ATH9K_RXERR_MIC;
--              }
++                      mic_error = false;
+               }
++
                /*
                 * Reject error frames with the exception of
                 * decryption and MIC failures. For monitor mode,
-@@ -886,6 +873,18 @@ static bool ath9k_rx_accept(struct ath_c
+@@ -886,6 +882,18 @@ static bool ath9k_rx_accept(struct ath_c
                        }
                }
        }
        return true;
  }
  
-@@ -1882,6 +1881,9 @@ int ath_rx_tasklet(struct ath_softc *sc,
-                       ath9k_rx_skb_postprocess(common, hdr_skb, &rs,
-                                                rxs, decrypt_error);
+@@ -1940,6 +1948,9 @@ int ath_rx_tasklet(struct ath_softc *sc,
+                       sc->rx.rxotherant = 0;
+               }
  
 +              if (rxs->flag & RX_FLAG_MMIC_STRIPPED)
 +                      skb_trim(skb, skb->len - 8);
 +
-               /* We will now give hardware our shiny new allocated skb */
-               bf->bf_mpdu = requeue_skb;
-               bf->bf_buf_addr = dma_map_single(sc->dev, requeue_skb->data,
+               spin_lock_irqsave(&sc->sc_pm_lock, flags);
+               if ((sc->ps_flags & (PS_WAIT_FOR_BEACON |