diff options
Diffstat (limited to 'package/mac80211/patches/200-hwkey_len.patch')
-rw-r--r-- | package/mac80211/patches/200-hwkey_len.patch | 183 |
1 files changed, 0 insertions, 183 deletions
diff --git a/package/mac80211/patches/200-hwkey_len.patch b/package/mac80211/patches/200-hwkey_len.patch deleted file mode 100644 index 20deeb778..000000000 --- a/package/mac80211/patches/200-hwkey_len.patch +++ /dev/null @@ -1,183 +0,0 @@ -Free up 2 bytes in skb->cb to be used for multi-rate retry later. -Move iv_len and icv_len initialization into key alloc. - -Signed-off-by: Felix Fietkau <nbd@openwrt.org> - ---- a/include/net/mac80211.h -+++ b/include/net/mac80211.h -@@ -337,8 +337,6 @@ - unsigned long jiffies; - s8 rts_cts_rate_idx, alt_retry_rate_idx; - u8 retry_limit; -- u8 icv_len; -- u8 iv_len; - } control; - struct { - u64 ampdu_ack_map; -@@ -635,6 +633,8 @@ - */ - struct ieee80211_key_conf { - enum ieee80211_key_alg alg; -+ u8 icv_len; -+ u8 iv_len; - u8 hw_key_idx; - u8 flags; - s8 keyidx; ---- a/drivers/net/wireless/b43/xmit.c -+++ b/drivers/net/wireless/b43/xmit.c -@@ -252,7 +252,7 @@ - } - - /* Hardware appends ICV. */ -- plcp_fragment_len += info->control.icv_len; -+ plcp_fragment_len += info->control.hw_key->icv_len; - - key_idx = b43_kidx_to_fw(dev, key_idx); - mac_ctl |= (key_idx << B43_TXH_MAC_KEYIDX_SHIFT) & -@@ -260,7 +260,7 @@ - mac_ctl |= (key->algorithm << B43_TXH_MAC_KEYALG_SHIFT) & - B43_TXH_MAC_KEYALG; - wlhdr_len = ieee80211_hdrlen(fctl); -- iv_len = min((size_t) info->control.iv_len, -+ iv_len = min((size_t) info->control.hw_key->iv_len, - ARRAY_SIZE(txhdr->iv)); - memcpy(txhdr->iv, ((u8 *) wlhdr) + wlhdr_len, iv_len); - } ---- a/drivers/net/wireless/b43legacy/xmit.c -+++ b/drivers/net/wireless/b43legacy/xmit.c -@@ -243,7 +243,7 @@ - - if (key->enabled) { - /* Hardware appends ICV. */ -- plcp_fragment_len += info->control.icv_len; -+ plcp_fragment_len += info->control.hw_key->icv_len; - - key_idx = b43legacy_kidx_to_fw(dev, key_idx); - mac_ctl |= (key_idx << B43legacy_TX4_MAC_KEYIDX_SHIFT) & -@@ -252,7 +252,7 @@ - B43legacy_TX4_MAC_KEYALG_SHIFT) & - B43legacy_TX4_MAC_KEYALG; - wlhdr_len = ieee80211_hdrlen(wlhdr->frame_control); -- iv_len = min((size_t)info->control.iv_len, -+ iv_len = min((size_t)info->control.hw_key->iv_len, - ARRAY_SIZE(txhdr->iv)); - memcpy(txhdr->iv, ((u8 *)wlhdr) + wlhdr_len, iv_len); - } else { ---- a/net/mac80211/wep.c -+++ b/net/mac80211/wep.c -@@ -313,9 +313,6 @@ - { - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - -- info->control.iv_len = WEP_IV_LEN; -- info->control.icv_len = WEP_ICV_LEN; -- - if (!(tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE)) { - if (ieee80211_wep_encrypt(tx->local, skb, tx->key)) - return -1; ---- a/net/mac80211/wpa.c -+++ b/net/mac80211/wpa.c -@@ -152,9 +152,6 @@ - int len, tail; - u8 *pos; - -- info->control.icv_len = TKIP_ICV_LEN; -- info->control.iv_len = TKIP_IV_LEN; -- - if ((tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) && - !(tx->key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) { - /* hwaccel - with no need for preallocated room for IV/ICV */ -@@ -374,9 +371,6 @@ - u8 *pos, *pn; - int i; - -- info->control.icv_len = CCMP_MIC_LEN; -- info->control.iv_len = CCMP_HDR_LEN; -- - if ((tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) && - !(tx->key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)) { - /* hwaccel - with no need for preallocated room for CCMP " ---- a/drivers/net/wireless/ath5k/base.c -+++ b/drivers/net/wireless/ath5k/base.c -@@ -1164,7 +1164,7 @@ - - if (info->control.hw_key) { - keyidx = info->control.hw_key->hw_key_idx; -- pktlen += info->control.icv_len; -+ pktlen += info->control.hw_key->icv_len; - } - ret = ah->ah_setup_tx_desc(ah, ds, pktlen, - ieee80211_get_hdrlen_from_skb(skb), AR5K_PKT_TYPE_NORMAL, ---- a/drivers/net/wireless/ath9k/xmit.c -+++ b/drivers/net/wireless/ath9k/xmit.c -@@ -237,7 +237,7 @@ - - if (tx_info->control.hw_key) { - txctl->keyix = tx_info->control.hw_key->hw_key_idx; -- txctl->frmlen += tx_info->control.icv_len; -+ txctl->frmlen += tx_info->control.hw_key->icv_len; - - if (tx_info->control.hw_key->alg == ALG_WEP) - txctl->keytype = ATH9K_KEY_TYPE_WEP; ---- a/drivers/net/wireless/rt2x00/rt2x00crypto.c -+++ b/drivers/net/wireless/rt2x00/rt2x00crypto.c -@@ -56,10 +56,10 @@ - * note that these lengths should only be added when - * mac80211 does not generate it. - */ -- overhead += tx_info->control.icv_len; -+ overhead += key->icv_len; - - if (!(key->flags & IEEE80211_KEY_FLAG_GENERATE_IV)) -- overhead += tx_info->control.iv_len; -+ overhead += key->iv_len; - - if (!(key->flags & IEEE80211_KEY_FLAG_GENERATE_MMIC)) { - if (key->alg == ALG_TKIP) ---- a/drivers/net/wireless/rt2x00/rt2x00queue.c -+++ b/drivers/net/wireless/rt2x00/rt2x00queue.c -@@ -374,7 +374,7 @@ - struct queue_entry *entry = rt2x00queue_get_entry(queue, Q_INDEX); - struct txentry_desc txdesc; - struct skb_frame_desc *skbdesc; -- unsigned int iv_len = IEEE80211_SKB_CB(skb)->control.iv_len; -+ unsigned int iv_len; - - if (unlikely(rt2x00queue_full(queue))) - return -EINVAL; -@@ -410,8 +410,11 @@ - * the frame so we can provide it to the driver seperately. - */ - if (test_bit(ENTRY_TXD_ENCRYPT, &txdesc.flags) && -- !test_bit(ENTRY_TXD_ENCRYPT_IV, &txdesc.flags)) -+ !test_bit(ENTRY_TXD_ENCRYPT_IV, &txdesc.flags) && -+ (IEEE80211_SKB_CB(skb)->control.hw_key != NULL)) { -+ iv_len = IEEE80211_SKB_CB(skb)->control.hw_key->iv_len; - rt2x00crypto_tx_remove_iv(skb, iv_len); -+ } - - /* - * It could be possible that the queue was corrupted and this ---- a/net/mac80211/key.c -+++ b/net/mac80211/key.c -@@ -281,6 +281,20 @@ - key->conf.alg = alg; - key->conf.keyidx = idx; - key->conf.keylen = key_len; -+ switch (alg) { -+ case ALG_WEP: -+ key->conf.iv_len = WEP_IV_LEN; -+ key->conf.icv_len = WEP_ICV_LEN; -+ break; -+ case ALG_TKIP: -+ key->conf.iv_len = TKIP_IV_LEN; -+ key->conf.icv_len = TKIP_ICV_LEN; -+ break; -+ case ALG_CCMP: -+ key->conf.iv_len = CCMP_HDR_LEN; -+ key->conf.icv_len = CCMP_MIC_LEN; -+ break; -+ } - memcpy(key->conf.key, key_data, key_len); - INIT_LIST_HEAD(&key->list); - INIT_LIST_HEAD(&key->todo); |