Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 32fbccaf authored by Sujith's avatar Sujith Committed by John W. Linville
Browse files

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: default avatarSujith <Sujith.Manoharan@atheros.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 29bffa96
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -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) |
+1 −2
Original line number Original line Diff line number Diff line
@@ -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);