ath9k: detect more kinds of invalid descriptors
If AR_CRCErr, AR_PHYErr, AR_DecryptCRCErr or AR_MichaelErr is indicated in the rx status word, but AR_RxFrameOK is also set, the descriptor contents are typically invalid. This can show up as a warning about invalid MCS rates in a frame. Even with those checks in place, a descriptor with invalid MCS rates can still sometimes make it through to the driver (mostly on older hardware like AR91xx). Detect such errors in the last descriptor of a frame and discard the whole frame if present. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:

committed by
John W. Linville

parent
723e711356
commit
3747c3eef6
@@ -615,6 +615,14 @@ int ath9k_hw_rxprocdesc(struct ath_hw *ah, struct ath_desc *ds,
|
||||
rs->rs_status |= ATH9K_RXERR_DECRYPT;
|
||||
else if (ads.ds_rxstatus8 & AR_MichaelErr)
|
||||
rs->rs_status |= ATH9K_RXERR_MIC;
|
||||
} else {
|
||||
if (ads.ds_rxstatus8 &
|
||||
(AR_CRCErr | AR_PHYErr | AR_DecryptCRCErr | AR_MichaelErr))
|
||||
rs->rs_status |= ATH9K_RXERR_CORRUPT_DESC;
|
||||
|
||||
/* Only up to MCS16 supported, everything above is invalid */
|
||||
if (rs->rs_rate >= 0x90)
|
||||
rs->rs_status |= ATH9K_RXERR_CORRUPT_DESC;
|
||||
}
|
||||
|
||||
if (ads.ds_rxstatus8 & AR_KeyMiss)
|
||||
|
Reference in New Issue
Block a user