Skip to content

Commit 85004a4

Browse files
zhengchaoshaoSasha Levin
authored andcommitted
wifi: brcmfmac: unmap dma buffer in brcmf_msgbuf_alloc_pktid()
[ Upstream commit b9f4200 ] After the DMA buffer is mapped to a physical address, address is stored in pktids in brcmf_msgbuf_alloc_pktid(). Then, pktids is parsed in brcmf_msgbuf_get_pktid()/brcmf_msgbuf_release_array() to obtain physaddr and later unmap the DMA buffer. But when count is always equal to pktids->array_size, physaddr isn't stored in pktids and the DMA buffer will not be unmapped anyway. Fixes: 9a1bb60 ("brcmfmac: Adding msgbuf protocol.") Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com> Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20221207013114.1748936-1-shaozhengchao@huawei.com Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent 9783733 commit 85004a4

File tree

1 file changed

+4
-1
lines changed
  • drivers/net/wireless/broadcom/brcm80211/brcmfmac

1 file changed

+4
-1
lines changed

drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,8 +345,11 @@ brcmf_msgbuf_alloc_pktid(struct device *dev,
345345
count++;
346346
} while (count < pktids->array_size);
347347

348-
if (count == pktids->array_size)
348+
if (count == pktids->array_size) {
349+
dma_unmap_single(dev, *physaddr, skb->len - data_offset,
350+
pktids->direction);
349351
return -ENOMEM;
352+
}
350353

351354
array[*idx].data_offset = data_offset;
352355
array[*idx].physaddr = *physaddr;

0 commit comments

Comments
 (0)