aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Hughes <james.hughes@raspberrypi.org>2017-04-24 07:40:50 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-05-14 08:00:20 -0400
commitf73dfc29afa6b366158a0f3cc0844bca5fd9ca8f (patch)
treecb4bbf071e3fe0122c60a68644b50571c7b28b79
parentb0e2e3acfe8ebe95e9d6189b94e75d685c7f6d15 (diff)
brcmfmac: Ensure pointer correctly set if skb data location changes
commit 455a1eb4654c24560eb9dfc634f29cba3d87601e upstream. The incoming skb header may be resized if header space is insufficient, which might change the data adddress in the skb. Ensure that a cached pointer to that data is correctly set by moving assignment to after any possible changes. 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>
-rw-r--r--drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
index 5eaac13e2317..9b7c19a508ac 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
@@ -198,7 +198,7 @@ static netdev_tx_t brcmf_netdev_start_xmit(struct sk_buff *skb,
198 int ret; 198 int ret;
199 struct brcmf_if *ifp = netdev_priv(ndev); 199 struct brcmf_if *ifp = netdev_priv(ndev);
200 struct brcmf_pub *drvr = ifp->drvr; 200 struct brcmf_pub *drvr = ifp->drvr;
201 struct ethhdr *eh = (struct ethhdr *)(skb->data); 201 struct ethhdr *eh;
202 202
203 brcmf_dbg(DATA, "Enter, bsscfgidx=%d\n", ifp->bsscfgidx); 203 brcmf_dbg(DATA, "Enter, bsscfgidx=%d\n", ifp->bsscfgidx);
204 204
@@ -236,6 +236,8 @@ static netdev_tx_t brcmf_netdev_start_xmit(struct sk_buff *skb,
236 goto done; 236 goto done;
237 } 237 }
238 238
239 eh = (struct ethhdr *)(skb->data);
240
239 if (eh->h_proto == htons(ETH_P_PAE)) 241 if (eh->h_proto == htons(ETH_P_PAE))
240 atomic_inc(&ifp->pend_8021x_cnt); 242 atomic_inc(&ifp->pend_8021x_cnt);
241 243