Skip to content
This repository has been archived by the owner on Sep 24, 2020. It is now read-only.

Commit

Permalink
ath9k: correctly handle short radar pulses
Browse files Browse the repository at this point in the history
In commit 3c0efb7 ("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: 3c0efb7 ("ath9k: discard undersized packets")
Signed-off-by: Zefir Kurtisi <zefir.kurtisi@neratec.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  • Loading branch information
zefir-kurtisi authored and Kalle Valo committed Jun 27, 2019
1 parent d9e4769 commit df5c415
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion drivers/net/wireless/ath/ath9k/recv.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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;
}
Expand Down

0 comments on commit df5c415

Please sign in to comment.