diff options
author | Hauke Mehrtens <hauke@hauke-m.de> | 2018-09-23 18:48:09 +0200 |
---|---|---|
committer | John Crispin <john@phrozen.org> | 2018-09-26 16:39:44 +0200 |
commit | ec684ce193be84b3c2a25f6a3cfcc91bf3d75bfd (patch) | |
tree | 7e87918db5f7681343817ef9a716359492b32039 /package/kernel/mac80211/patches/384-mac80211-avoid-kernel-panic-when-building-AMSDU-from.patch | |
parent | db90c243a0b9bd72fc691cd09e58a96ac2a452cf (diff) | |
download | upstream-ec684ce193be84b3c2a25f6a3cfcc91bf3d75bfd.tar.gz upstream-ec684ce193be84b3c2a25f6a3cfcc91bf3d75bfd.tar.bz2 upstream-ec684ce193be84b3c2a25f6a3cfcc91bf3d75bfd.zip |
mac80211: Add patches which were added later
These patches were added after the new matches structure for the
mac80211 package was created. All the deleted patches are already
integrated in kernel 4.19-rc4.
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Diffstat (limited to 'package/kernel/mac80211/patches/384-mac80211-avoid-kernel-panic-when-building-AMSDU-from.patch')
-rw-r--r-- | package/kernel/mac80211/patches/384-mac80211-avoid-kernel-panic-when-building-AMSDU-from.patch | 102 |
1 files changed, 0 insertions, 102 deletions
diff --git a/package/kernel/mac80211/patches/384-mac80211-avoid-kernel-panic-when-building-AMSDU-from.patch b/package/kernel/mac80211/patches/384-mac80211-avoid-kernel-panic-when-building-AMSDU-from.patch deleted file mode 100644 index 66993839ee..0000000000 --- a/package/kernel/mac80211/patches/384-mac80211-avoid-kernel-panic-when-building-AMSDU-from.patch +++ /dev/null @@ -1,102 +0,0 @@ -From: Sara Sharon <sara.sharon@intel.com> -Date: Wed, 29 Aug 2018 08:57:02 +0200 -Subject: [PATCH] mac80211: avoid kernel panic when building AMSDU from - non-linear SKB - -When building building AMSDU from non-linear SKB, we hit a -kernel panic when trying to push the padding to the tail. -Instead, put the padding at the head of the next subframe. -This also fixes the A-MSDU subframes to not have the padding -accounted in the length field and not have pad at all for -the last subframe, both required by the spec. - -Fixes: 6e0456b54545 ("mac80211: add A-MSDU tx support") -Signed-off-by: Sara Sharon <sara.sharon@intel.com> -Reviewed-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com> -Signed-off-by: Johannes Berg <johannes.berg@intel.com> ---- - ---- a/net/mac80211/tx.c -+++ b/net/mac80211/tx.c -@@ -3064,27 +3064,18 @@ void ieee80211_clear_fast_xmit(struct st - } - - static bool ieee80211_amsdu_realloc_pad(struct ieee80211_local *local, -- struct sk_buff *skb, int headroom, -- int *subframe_len) -+ struct sk_buff *skb, int headroom) - { -- int amsdu_len = *subframe_len + sizeof(struct ethhdr); -- int padding = (4 - amsdu_len) & 3; -- -- if (skb_headroom(skb) < headroom || skb_tailroom(skb) < padding) { -+ if (skb_headroom(skb) < headroom) { - I802_DEBUG_INC(local->tx_expand_skb_head); - -- if (pskb_expand_head(skb, headroom, padding, GFP_ATOMIC)) { -+ if (pskb_expand_head(skb, headroom, 0, GFP_ATOMIC)) { - wiphy_debug(local->hw.wiphy, - "failed to reallocate TX buffer\n"); - return false; - } - } - -- if (padding) { -- *subframe_len += padding; -- skb_put_zero(skb, padding); -- } -- - return true; - } - -@@ -3108,8 +3099,7 @@ static bool ieee80211_amsdu_prepare_head - if (info->control.flags & IEEE80211_TX_CTRL_AMSDU) - return true; - -- if (!ieee80211_amsdu_realloc_pad(local, skb, sizeof(*amsdu_hdr), -- &subframe_len)) -+ if (!ieee80211_amsdu_realloc_pad(local, skb, sizeof(*amsdu_hdr))) - return false; - - data = skb_push(skb, sizeof(*amsdu_hdr)); -@@ -3176,7 +3166,8 @@ static bool ieee80211_amsdu_aggregate(st - void *data; - bool ret = false; - unsigned int orig_len; -- int n = 1, nfrags; -+ int n = 1, nfrags, pad = 0; -+ u16 hdrlen; - - if (!ieee80211_hw_check(&local->hw, TX_AMSDU)) - return false; -@@ -3228,8 +3219,19 @@ static bool ieee80211_amsdu_aggregate(st - if (max_frags && nfrags > max_frags) - goto out; - -- if (!ieee80211_amsdu_realloc_pad(local, skb, sizeof(rfc1042_header) + 2, -- &subframe_len)) -+ /* -+ * Pad out the previous subframe to a multiple of 4 by adding the -+ * padding to the next one, that's being added. Note that head->len -+ * is the length of the full A-MSDU, but that works since each time -+ * we add a new subframe we pad out the previous one to a multiple -+ * of 4 and thus it no longer matters in the next round. -+ */ -+ hdrlen = fast_tx->hdr_len - sizeof(rfc1042_header); -+ if ((head->len - hdrlen) & 3) -+ pad = 4 - ((head->len - hdrlen) & 3); -+ -+ if (!ieee80211_amsdu_realloc_pad(local, skb, sizeof(rfc1042_header) + -+ 2 + pad)) - goto out; - - ret = true; -@@ -3241,6 +3243,8 @@ static bool ieee80211_amsdu_aggregate(st - memcpy(data, &len, 2); - memcpy(data + 2, rfc1042_header, sizeof(rfc1042_header)); - -+ memset(skb_push(skb, pad), 0, pad); -+ - head->len += skb->len; - head->data_len += skb->len; - *frag_tail = skb; |