diff options
author | Malcolm Priestley <tvboxspy@gmail.com> | 2015-02-01 11:59:41 +0000 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-02-07 17:16:59 +0800 |
commit | 6d854127268010f98c66c9e93fd278c2d76a6562 (patch) | |
tree | fe39f841a93f2b293b1c22a73cf0589dc1062534 | |
parent | d17f4c8a42256dae6aa598bdbc00eff8b38cc949 (diff) | |
download | blackbird-op-linux-6d854127268010f98c66c9e93fd278c2d76a6562.tar.gz blackbird-op-linux-6d854127268010f98c66c9e93fd278c2d76a6562.zip |
staging: vt6655: vnt_rx_data add track rsr and new_rsr errors
If not rsr & RSR_CRCOK report RX_FLAG_FAILED_FCS_CRC
If not rsr & (RSR_IVLDTYP | RSR_IVLDLEN) drop packet
If not NEWRSR_DECRYPTOK on new_rsr drop packet.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/staging/vt6655/dpc.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/staging/vt6655/dpc.c b/drivers/staging/vt6655/dpc.c index 11cc09014a52..3c5b87ffdcac 100644 --- a/drivers/staging/vt6655/dpc.c +++ b/drivers/staging/vt6655/dpc.c @@ -91,6 +91,8 @@ static bool vnt_rx_data(struct vnt_private *priv, struct sk_buff *skb, new_rsr = skb_data + bytes_received - 3; rssi = skb_data + bytes_received - 2; rsr = skb_data + bytes_received - 1; + if (*rsr & (RSR_IVLDTYP | RSR_IVLDLEN)) + return false; RFvRSSITodBm(priv, *rssi, &rx_dbm); @@ -106,6 +108,9 @@ static bool vnt_rx_data(struct vnt_private *priv, struct sk_buff *skb, rx_status.flag = 0; rx_status.freq = hw->conf.chandef.chan->center_freq; + if (!(*rsr & RSR_CRCOK)) + rx_status.flag |= RX_FLAG_FAILED_FCS_CRC; + hdr = (struct ieee80211_hdr *)(skb->data); fc = hdr->frame_control; @@ -113,7 +118,11 @@ static bool vnt_rx_data(struct vnt_private *priv, struct sk_buff *skb, if (ieee80211_has_protected(fc)) { if (priv->byLocalID > REV_ID_VT3253_A1) - rx_status.flag = RX_FLAG_DECRYPTED; + rx_status.flag |= RX_FLAG_DECRYPTED; + + /* Drop packet */ + if (!(*new_rsr & NEWRSR_DECRYPTOK)) + return false; } memcpy(IEEE80211_SKB_RXCB(skb), &rx_status, sizeof(rx_status)); |