mac80211: brcmfmac: backport important changes from the 4.12
[openwrt/staging/chunkeey.git] / package / kernel / mac80211 / patches / 319-v4.12-0011-brcmfmac-Make-skb-header-writable-before-use.patch
1 From 9cc4b7cb86cbcc6330a3faa8cd65268cd2d3c227 Mon Sep 17 00:00:00 2001
2 From: James Hughes <james.hughes@raspberrypi.org>
3 Date: Tue, 25 Apr 2017 10:15:06 +0100
4 Subject: [PATCH] brcmfmac: Make skb header writable before use
5
6 The driver was making changes to the skb_header without
7 ensuring it was writable (i.e. uncloned).
8 This patch also removes some boiler plate header size
9 checking/adjustment code as that is also handled by the
10 skb_cow_header function used to make header writable.
11
12 Signed-off-by: James Hughes <james.hughes@raspberrypi.org>
13 Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
14 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
15 ---
16 .../net/wireless/broadcom/brcm80211/brcmfmac/core.c | 19 +++++--------------
17 1 file changed, 5 insertions(+), 14 deletions(-)
18
19 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
20 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
21 @@ -211,22 +211,13 @@ static netdev_tx_t brcmf_netdev_start_xm
22 goto done;
23 }
24
25 - /* Make sure there's enough room for any header */
26 - if (skb_headroom(skb) < drvr->hdrlen) {
27 - struct sk_buff *skb2;
28 -
29 - brcmf_dbg(INFO, "%s: insufficient headroom\n",
30 + /* Make sure there's enough writable headroom*/
31 + ret = skb_cow_head(skb, drvr->hdrlen);
32 + if (ret < 0) {
33 + brcmf_err("%s: skb_cow_head failed\n",
34 brcmf_ifname(ifp));
35 - drvr->bus_if->tx_realloc++;
36 - skb2 = skb_realloc_headroom(skb, drvr->hdrlen);
37 dev_kfree_skb(skb);
38 - skb = skb2;
39 - if (skb == NULL) {
40 - brcmf_err("%s: skb_realloc_headroom failed\n",
41 - brcmf_ifname(ifp));
42 - ret = -ENOMEM;
43 - goto done;
44 - }
45 + goto done;
46 }
47
48 /* validate length for ether packet */