linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] brcmfmac: Don't grow SKB by negative size
@ 2017-07-26  8:49 Daniel Stone
  2017-07-26  9:32 ` Arend van Spriel
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Daniel Stone @ 2017-07-26  8:49 UTC (permalink / raw)
  To: linux-wireless
  Cc: brcm80211-dev-list.pdl, brcm80211-dev-list, Arend Van Spriel,
	James Hughes, Hante Meuleman, Pieter-Paul Giesberts, Franky Lin

The commit to rework the headroom check in start_xmit() now calls
pxskb_expand_head() unconditionally if the header is CoW. Unfortunately,
it does so with the delta between the extant headroom and the header
length, which may be negative if there is already sufficient headroom.

pskb_expand_head() does allow for size being 0, in which case it just
copies, so clamp the header delta to zero.

Opening Chrome (and all my tabs) on a PCIE device was enough to reliably
hit this.

Fixes: 270a6c1f65fe ("brcmfmac: rework headroom check in .start_xmit()")
Signed-off-by: Daniel Stone <daniels@collabora.com>
Cc: Arend Van Spriel <arend.vanspriel@broadcom.com>
Cc: James Hughes <james.hughes@raspberrypi.org>
Cc: Hante Meuleman <hante.meuleman@broadcom.com>
Cc: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
Cc: Franky Lin <franky.lin@broadcom.com>
---
 drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 1 +
 1 file changed, 1 insertion(+)

Really sorry, I forgot to re-run format-patch after fixing the initial
patch. I've run out of coffee. :(

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
index 2153e8062b4c..42dbd5a8c220 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
@@ -215,6 +215,7 @@ static netdev_tx_t brcmf_netdev_start_xmit(struct sk_buff *skb,
 	/* Make sure there's enough writeable headroom */
 	if (skb_headroom(skb) < drvr->hdrlen || skb_header_cloned(skb)) {
 		head_delta = drvr->hdrlen - skb_headroom(skb);
+		head_delta = max(head_delta, 0);
 
 		brcmf_dbg(INFO, "%s: insufficient headroom (%d)\n",
 			  brcmf_ifname(ifp), head_delta);
-- 
2.13.2

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-07-27 11:03 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-07-26  8:49 [PATCH v2] brcmfmac: Don't grow SKB by negative size Daniel Stone
2017-07-26  9:32 ` Arend van Spriel
2017-07-26 11:03 ` [PATCH for-4.13 V3] " Daniel Stone
2017-07-26 11:15   ` Arend van Spriel
2017-07-26 11:24 ` [PATCH for-v4.13 V4] " Daniel Stone
2017-07-26 21:59   ` [for-v4.13,V4] " Hans de Goede
2017-07-27  6:15   ` [PATCH for-v4.13 V4] " Kalle Valo
2017-07-27 11:03   ` [for-v4.13,V4] " Kalle Valo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).