]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
wifi: brcmfmac: make release_scratchbuffers idempotent
authorFan Wu <fanwu01@zju.edu.cn>
Sat, 18 Jul 2026 02:43:52 +0000 (02:43 +0000)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 21 Jul 2026 11:35:29 +0000 (13:35 +0200)
commit538c51e9d124cf656f2dd0c0394a8545efc7102d
tree4519ecc8ebf6e266d124c65e5d93881b1886d89a
parenta007a384c9eb17610f53a53e2f59944c31f1565a
wifi: brcmfmac: make release_scratchbuffers idempotent

brcmf_pcie_release_scratchbuffers() frees the shared.scratch and
shared.ringupd DMA buffers with dma_free_coherent() but does not clear
the pointers afterwards, unlike the sibling release_ringbuffers() which
NULLs commonrings/flowrings/idxbuf on release.

Both the bus_reset .reset callback (brcmf_pcie_reset) and
brcmf_pcie_remove() call release_scratchbuffers.  When reset teardown
has run before removal, remove's own teardown would call
dma_free_coherent() a second time on the already-freed DMA allocation.

NULL the pointers after free, matching release_ringbuffers(), so a later
release observes that the allocation has already been released.  This
patch makes repeated sequential release safe; the reset-work lifetime is
handled separately by the following patch.

This issue was found by an in-house static analysis tool.

Fixes: 4684997d9eea ("brcmfmac: reset PCIe bus on a firmware crash")
Cc: stable@vger.kernel.org
Signed-off-by: Fan Wu <fanwu01@zju.edu.cn>
Assisted-by: Codex:gpt-5.6
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Link: https://patch.msgid.link/20260718024353.3147201-2-fanwu01@zju.edu.cn
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c