mirror of
https://github.com/torvalds/linux.git
synced 2024-12-22 19:01:37 +00:00
ath9k_htc: Fix TKIP encryption
Set IEEE80211_HW_RX_INCLUDES_FCS to indicate that the FCS is present in RX frames. Also, remove a redundant assignment of skb length and include the FCS_LEN when checking padding. Fixing this issue makes TKIP work. Signed-off-by: Sujith <Sujith.Manoharan@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
29bffa96e9
commit
32fbccafed
@ -513,7 +513,8 @@ static void ath9k_set_hw_capab(struct ath9k_htc_priv *priv,
|
|||||||
hw->flags = IEEE80211_HW_SIGNAL_DBM |
|
hw->flags = IEEE80211_HW_SIGNAL_DBM |
|
||||||
IEEE80211_HW_AMPDU_AGGREGATION |
|
IEEE80211_HW_AMPDU_AGGREGATION |
|
||||||
IEEE80211_HW_SPECTRUM_MGMT |
|
IEEE80211_HW_SPECTRUM_MGMT |
|
||||||
IEEE80211_HW_HAS_RATE_CONTROL;
|
IEEE80211_HW_HAS_RATE_CONTROL |
|
||||||
|
IEEE80211_HW_RX_INCLUDES_FCS;
|
||||||
|
|
||||||
hw->wiphy->interface_modes =
|
hw->wiphy->interface_modes =
|
||||||
BIT(NL80211_IFTYPE_STATION) |
|
BIT(NL80211_IFTYPE_STATION) |
|
||||||
|
@ -450,7 +450,7 @@ static bool ath9k_rx_prepare(struct ath9k_htc_priv *priv,
|
|||||||
padpos = ath9k_cmn_padpos(fc);
|
padpos = ath9k_cmn_padpos(fc);
|
||||||
|
|
||||||
padsize = padpos & 3;
|
padsize = padpos & 3;
|
||||||
if (padsize && skb->len >= padpos+padsize) {
|
if (padsize && skb->len >= padpos+padsize+FCS_LEN) {
|
||||||
memmove(skb->data + padsize, skb->data, padpos);
|
memmove(skb->data + padsize, skb->data, padpos);
|
||||||
skb_pull(skb, padsize);
|
skb_pull(skb, padsize);
|
||||||
}
|
}
|
||||||
@ -646,7 +646,6 @@ void ath9k_htc_rxep(void *drv_priv, struct sk_buff *skb,
|
|||||||
spin_lock(&priv->rx.rxbuflock);
|
spin_lock(&priv->rx.rxbuflock);
|
||||||
memcpy(&rxbuf->rxstatus, rxstatus, HTC_RX_FRAME_HEADER_SIZE);
|
memcpy(&rxbuf->rxstatus, rxstatus, HTC_RX_FRAME_HEADER_SIZE);
|
||||||
skb_pull(skb, HTC_RX_FRAME_HEADER_SIZE);
|
skb_pull(skb, HTC_RX_FRAME_HEADER_SIZE);
|
||||||
skb->len = rxstatus->rs_datalen;
|
|
||||||
rxbuf->skb = skb;
|
rxbuf->skb = skb;
|
||||||
rxbuf->in_process = true;
|
rxbuf->in_process = true;
|
||||||
spin_unlock(&priv->rx.rxbuflock);
|
spin_unlock(&priv->rx.rxbuflock);
|
||||||
|
Loading…
Reference in New Issue
Block a user