mirror of https://gitee.com/openkylin/linux.git
ath9k: correctly handle short radar pulses
In commit3c0efb745a
("ath9k: discard undersized packets") the lower bound of RX packets was set to 10 (min ACK size) to filter those that would otherwise be treated as invalid at mac80211. Alas, short radar pulses are reported as PHY_ERROR frames with length set to 3. Therefore their detection stopped working after that commit. NOTE: ath9k drivers built thereafter will not pass DFS certification. This extends the criteria for short packets to explicitly handle PHY_ERROR frames. Fixes:3c0efb745a
("ath9k: discard undersized packets") Signed-off-by: Zefir Kurtisi <zefir.kurtisi@neratec.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
d9e4769896
commit
df5c415050
|
@ -815,6 +815,7 @@ static int ath9k_rx_skb_preprocess(struct ath_softc *sc,
|
|||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
struct ieee80211_hdr *hdr;
|
||||
bool discard_current = sc->rx.discard_next;
|
||||
bool is_phyerr;
|
||||
|
||||
/*
|
||||
* Discard corrupt descriptors which are marked in
|
||||
|
@ -827,8 +828,11 @@ static int ath9k_rx_skb_preprocess(struct ath_softc *sc,
|
|||
|
||||
/*
|
||||
* Discard zero-length packets and packets smaller than an ACK
|
||||
* which are not PHY_ERROR (short radar pulses have a length of 3)
|
||||
*/
|
||||
if (rx_stats->rs_datalen < 10) {
|
||||
is_phyerr = rx_stats->rs_status & ATH9K_RXERR_PHY;
|
||||
if (!rx_stats->rs_datalen ||
|
||||
(rx_stats->rs_datalen < 10 && !is_phyerr)) {
|
||||
RX_STAT_INC(sc, rx_len_err);
|
||||
goto corrupt;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue