Skip to content

Commit b9f4200

Browse files
zhengchaoshaoKalle Valo
authored andcommitted
wifi: brcmfmac: unmap dma buffer in brcmf_msgbuf_alloc_pktid()
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
1 parent 212fde3 commit b9f4200

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
@@ -347,8 +347,11 @@ brcmf_msgbuf_alloc_pktid(struct device *dev,
347347
count++;
348348
} while (count < pktids->array_size);
349349

350-
if (count == pktids->array_size)
350+
if (count == pktids->array_size) {
351+
dma_unmap_single(dev, *physaddr, skb->len - data_offset,
352+
pktids->direction);
351353
return -ENOMEM;
354+
}
352355

353356
array[*idx].data_offset = data_offset;
354357
array[*idx].physaddr = *physaddr;

0 commit comments

Comments
 (0)