Commit 452218d9 authored by Arik Nemtsov's avatar Arik Nemtsov Committed by Johannes Berg

mac80211: fix network header breakage during encryption

When an IV is generated, only the MAC header is moved back. The network
header location remains the same relative to the skb head, as the new IV
is using headroom space that was reserved in advance.
Signed-off-by: default avatarArik Nemtsov <>
Signed-off-by: default avatarEmmanuel Grumbach <>
Signed-off-by: default avatarJohannes Berg <>
parent a7f3a768
......@@ -111,8 +111,6 @@ static u8 *ieee80211_wep_add_iv(struct ieee80211_local *local,
(info->control.hw_key->flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE))
return newhdr + hdrlen;
skb_set_network_header(skb, skb_network_offset(skb) +
ieee80211_wep_get_iv(local, keylen, keyidx, newhdr + hdrlen);
return newhdr + hdrlen;
......@@ -209,8 +209,6 @@ static int tkip_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb)
pos = skb_push(skb, IEEE80211_TKIP_IV_LEN);
memmove(pos, pos + IEEE80211_TKIP_IV_LEN, hdrlen);
skb_set_network_header(skb, skb_network_offset(skb) +
pos += hdrlen;
/* the HW only needs room for the IV, but not the actual IV */
......@@ -434,8 +432,6 @@ static int ccmp_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb)
pos = skb_push(skb, IEEE80211_CCMP_HDR_LEN);
memmove(pos, pos + IEEE80211_CCMP_HDR_LEN, hdrlen);
skb_set_network_header(skb, skb_network_offset(skb) +
/* the HW only needs room for the IV, but not the actual IV */
if (info->control.hw_key &&
......@@ -575,7 +571,6 @@ ieee80211_crypto_cs_encrypt(struct ieee80211_tx_data *tx,
pos = skb_push(skb, cs->hdr_len);
memmove(pos, pos + cs->hdr_len, hdrlen);
skb_set_network_header(skb, skb_network_offset(skb) + cs->hdr_len);
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment