aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/384-mac80211-avoid-kernel-panic-when-building-AMSDU-from.patch
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2018-09-23 18:48:09 +0200
committerJohn Crispin <john@phrozen.org>2018-09-26 16:39:44 +0200
commitec684ce193be84b3c2a25f6a3cfcc91bf3d75bfd (patch)
tree7e87918db5f7681343817ef9a716359492b32039 /package/kernel/mac80211/patches/384-mac80211-avoid-kernel-panic-when-building-AMSDU-from.patch
parentdb90c243a0b9bd72fc691cd09e58a96ac2a452cf (diff)
downloadupstream-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.patch102
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;