This uses the proper skb wrapper function sk_unlink in the function
brcmf_sdio_txpkt_postp to properly protect against concurrent users
accessing this skb_buff pointer or skb_buff_head pointer by locking
the spinlock as part of the passed skb_buff_head's definition due to
neither this function nor its callers locking this spinlock before
calling skb_unlink in order to avoid possible concurrent access on
either of these possibly shared structure pointers.
Signed-off-by: Nicholas Krause <xerofoify@xxxxxxxxx>
---
drivers/net/wireless/brcm80211/brcmfmac/sdio.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/brcm80211/brcmfmac/sdio.c
index f990e3d..6b66542 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/sdio.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/sdio.c
@@ -2308,7 +2308,7 @@ brcmf_sdio_txpkt_postp(struct brcmf_sdio *bus, struct sk_buff_head *pktq)
pkt_prev = pkt_next->prev;
skb_put(pkt_prev, chop_len);
}
- __skb_unlink(pkt_next, pktq);
+ skb_unlink(pkt_next, pktq);
brcmu_pkt_buf_free_skb(pkt_next);
} else {
hdr = pkt_next->data + bus->tx_hdrlen - SDPCM_SWHDR_LEN;