Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 31800512 authored by Zhengchao Shao's avatar Zhengchao Shao Committed by Greg Kroah-Hartman
Browse files

wifi: brcmfmac: unmap dma buffer in brcmf_msgbuf_alloc_pktid()



[ Upstream commit b9f420032f2ba1e634b22ca7b433e5c40ea663af ]

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: 9a1bb602 ("brcmfmac: Adding msgbuf protocol.")
Signed-off-by: default avatarZhengchao Shao <shaozhengchao@huawei.com>
Reviewed-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: default avatarKalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20221207013114.1748936-1-shaozhengchao@huawei.com


Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent d869a189
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -345,8 +345,11 @@ brcmf_msgbuf_alloc_pktid(struct device *dev,
		count++;
	} while (count < pktids->array_size);

	if (count == pktids->array_size)
	if (count == pktids->array_size) {
		dma_unmap_single(dev, *physaddr, skb->len - data_offset,
				 pktids->direction);
		return -ENOMEM;
	}

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