Skip to content

Commit 59fcc1b

Browse files
James Hughesgregkh
authored andcommitted
brcmfmac: Make skb header writable before use
commit 9cc4b7cb86cbcc6330a3faa8cd65268cd2d3c227 upstream. The driver was making changes to the skb_header without ensuring it was writable (i.e. uncloned). This patch also removes some boiler plate header size checking/adjustment code as that is also handled by the skb_cow_header function used to make header writable. Signed-off-by: James Hughes <james.hughes@raspberrypi.org> Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 0d89c7a commit 59fcc1b

1 file changed

Lines changed: 5 additions & 14 deletions

File tree

  • drivers/net/wireless/brcm80211/brcmfmac

drivers/net/wireless/brcm80211/brcmfmac/core.c

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -232,22 +232,13 @@ static netdev_tx_t brcmf_netdev_start_xmit(struct sk_buff *skb,
232232
goto done;
233233
}
234234

235-
/* Make sure there's enough room for any header */
236-
if (skb_headroom(skb) < drvr->hdrlen) {
237-
struct sk_buff *skb2;
238-
239-
brcmf_dbg(INFO, "%s: insufficient headroom\n",
235+
/* Make sure there's enough writable headroom*/
236+
ret = skb_cow_head(skb, drvr->hdrlen);
237+
if (ret < 0) {
238+
brcmf_err("%s: skb_cow_head failed\n",
240239
brcmf_ifname(drvr, ifp->bssidx));
241-
drvr->bus_if->tx_realloc++;
242-
skb2 = skb_realloc_headroom(skb, drvr->hdrlen);
243240
dev_kfree_skb(skb);
244-
skb = skb2;
245-
if (skb == NULL) {
246-
brcmf_err("%s: skb_realloc_headroom failed\n",
247-
brcmf_ifname(drvr, ifp->bssidx));
248-
ret = -ENOMEM;
249-
goto done;
250-
}
241+
goto done;
251242
}
252243

253244
/* validate length for ether packet */

0 commit comments

Comments
 (0)