diff options
-rw-r--r-- | drivers/net/wireless/ath/ath9k/recv.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c index 5b84ce4ee45e..30cb7267c12b 100644 --- a/drivers/net/wireless/ath/ath9k/recv.c +++ b/drivers/net/wireless/ath/ath9k/recv.c | |||
@@ -1099,6 +1099,16 @@ static int ath9k_rx_skb_preprocess(struct ath_softc *sc, | |||
1099 | if (rx_stats->rs_more) | 1099 | if (rx_stats->rs_more) |
1100 | return 0; | 1100 | return 0; |
1101 | 1101 | ||
1102 | /* | ||
1103 | * Return immediately if the RX descriptor has been marked | ||
1104 | * as corrupt based on the various error bits. | ||
1105 | * | ||
1106 | * This is different from the other corrupt descriptor | ||
1107 | * condition handled above. | ||
1108 | */ | ||
1109 | if (rx_stats->rs_status & ATH9K_RXERR_CORRUPT_DESC) | ||
1110 | return -EINVAL; | ||
1111 | |||
1102 | hdr = (struct ieee80211_hdr *) (skb->data + ah->caps.rx_status_len); | 1112 | hdr = (struct ieee80211_hdr *) (skb->data + ah->caps.rx_status_len); |
1103 | 1113 | ||
1104 | ath9k_process_tsf(rx_stats, rx_status, tsf); | 1114 | ath9k_process_tsf(rx_stats, rx_status, tsf); |
@@ -1335,8 +1345,6 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp) | |||
1335 | sc->rx.frag = skb; | 1345 | sc->rx.frag = skb; |
1336 | goto requeue; | 1346 | goto requeue; |
1337 | } | 1347 | } |
1338 | if (rs.rs_status & ATH9K_RXERR_CORRUPT_DESC) | ||
1339 | goto requeue_drop_frag; | ||
1340 | 1348 | ||
1341 | if (sc->rx.frag) { | 1349 | if (sc->rx.frag) { |
1342 | int space = skb->len - skb_tailroom(hdr_skb); | 1350 | int space = skb->len - skb_tailroom(hdr_skb); |