CVE-2026-99061
wifi: brcmfmac: fix P2P device removal race in brcmf_detach()
Fetching some sources has been requested. Reload in about a minute to see them.
Description
In the Linux kernel, the following vulnerability has been resolved: wifi: brcmfmac: fix P2P device removal race in brcmf_detach() When the driver is removed while the user space process that created the P2P device (e.g. wpa_supplicant) is still exiting, the P2P device interface is removed twice and the kernel crashes. The two paths are: - wpa_supplicant, on exit, sends NL80211_CMD_DEL_INTERFACE for the P2P device. nl80211_del_interface() holds RTNL and the wiphy mutex and calls brcmf_p2p_del_vif(), which disables discovery and waits up to 1.5 s for BRCMF_E_IF_DEL. Then it calls brcmf_remove_interface(), which unregisters the wdev and frees the vif and the ifp. - brcmf_detach() sets the bus down, so BRCMF_E_IF_DEL never arrives, and calls brcmf_remove_interface(ifp, false) for the same ifp. brcmf_p2p_ifp_removed() reads ifp->vif and then blocks on rtnl_lock(). When brcmf_p2p_del_vif() releases RTNL, it calls cfg80211_unregister_wdev() on the wdev that was already unregistered and freed. The second list_del_rcu() of wdev->list faults on LIST_POISON2: brcmfmac: brcmf_p2p_del_vif delete P2P vif brcmfmac: brcmf_p2p_deinit_discovery enter brcmfmac: brcmf_p2p_del_vif P2P: GO_NEG_PHASE status cleared brcmfmac: brcmf_detach Enter brcmfmac: brcmf_bus_change_state 1 -> 0 brcmfmac: brcmf_remove_interface Enter, bsscfgidx=1, ifidx=0 brcmfmac: brcmf_del_if Enter, bsscfgidx=1, ifidx=0 brcmfmac: brcmf_p2p_ifp_removed P2P: device interface removed [1.5 s later, brcmf_p2p_del_vif() timed out] brcmfmac: brcmf_remove_interface Enter, bsscfgidx=1, ifidx=0 brcmfmac: brcmf_del_if Enter, bsscfgidx=1, ifidx=0 brcmfmac: brcmf_p2p_ifp_removed P2P: device interface removed Unable to handle kernel paging request at virtual address dead000000000122 Internal error: Oops: 96000044 [#1] PREEMPT_RT SMP pc : _cfg80211_unregister_wdev+0x6c/0x264 [cfg80211] Call trace: _cfg80211_unregister_wdev+0x6c/0x264 [cfg80211] cfg80211_unregister_wdev+0x10/0x1c [cfg80211] brcmf_p2p_ifp_removed+0x84/0xb0 [brcmfmac] brcmf_remove_interface+0x1f4/0x254 [brcmfmac] brcmf_detach+0x88/0x180 [brcmfmac] brcmf_sdio_remove+0x90/0x7b0 [brcmfmac] brcmf_sdiod_remove+0x20/0xa0 [brcmfmac] brcmf_ops_sdio_remove+0xbc/0x12c [brcmfmac] sdio_bus_remove+0x38/0x144 device_release_driver_internal+0x1e8/0x2c0 device_release_driver+0x14/0x20 brcmf_sdio_bus_remove+0x2c/0x40 [brcmfmac] brcmf_fwvid_unregister_vendor+0xd8/0x170 [brcmfmac] __exit_compat+0x18/0x418 [brcmfmac_cyw] __arm64_sys_delete_module+0x1ac/0x244 The log was taken with debug=0x406 on an i.MX 8M Plus board with a CYW55513 (Sona IF513) on SDIO. The driver is the Ezurio backport of brcmfmac from v6.18.22 on a 5.4-rt kernel. The code involved is the same in mainline. To reproduce: 1. Start wpa_supplicant on wlan0 and let it associate. It creates the P2P device (iw dev shows "type P2P-device"). 2. Stop wpa_supplicant and remove the driver without waiting for wpa_supplicant to exit: kill $(pidof wpa_supplicant) rmmod brcmfmac_cyw brcmfmac The crash is reproducible on that board. For the interface without a netdev (the P2P device), take RTNL and the wiphy mutex in brcmf_detach() before reading iflist, and remove it with locked=true. If brcmf_p2p_del_vif() runs first, brcmf_detach() finds the slot empty. If brcmf_detach() runs first, nl80211 does not find the wdev any more. The interfaces with a netdev are removed as before, because brcmf_del_if() takes RTNL on its own for the primary interface.
Affected products and packages
CNA (CVE.org)
| Vendor | Product | Versions |
|---|---|---|
| Linux | Linux | affected: 9831bcb987df4aff6a1d85975f1dda4c654f298d … < 7b79131e357c4786765b20a994ad40d4d35f2163 affected: 9831bcb987df4aff6a1d85975f1dda4c654f298d … < 2e0c8c60a11b3177e7432c71d41249e276a0825f affected: 9831bcb987df4aff6a1d85975f1dda4c654f298d … < eef16a74ff8ed2a838d6bb862bb2c7783fce7466 affected: 9831bcb987df4aff6a1d85975f1dda4c654f298d … < 47ca6395a1d91545cc9403f9218bc61be941a0c3 affected: 9831bcb987df4aff6a1d85975f1dda4c654f298d … < 08a3f02fea636e97a7422d1512f76dacdb5b0887 default: unaffected |
| Linux | Linux | affected: 4.4 unaffected: 0 … < 4.4 unaffected: 6.6.160 … <= 6.6.* unaffected: 6.12.113 … <= 6.12.* unaffected: 6.18.57 … <= 6.18.* unaffected: 7.2.11 … <= 7.2.* unaffected: 7.3 … <= * default: affected |
Open-source packages (GitHub Advisory / OSV)
wifi: brcmfmac: fix P2P device removal race in brcmf_detach()
| Ecosystem | Package | Affected versions | Fixed in |
|---|---|---|---|
| >= 9831bcb987df4aff6a1d85975f1dda4c654f298d, < 7b79131e357c4786765b20a994ad40d4d35f2163; < 2e0c8c60a11b3177e7432c71d41249e276a0825f; < eef16a74ff8ed2a838d6bb862bb2c7783fce7466; < 47ca6395a1d91545cc9403f9218bc61be941a0c3; < 08a3f02fea636e97a7422d1512f76dacdb5b0887 | 7b79131e357c4786765b20a994ad40d4d35f2163, 2e0c8c60a11b3177e7432c71d41249e276a0825f, eef16a74ff8ed2a838d6bb862bb2c7783fce7466, 47ca6395a1d91545cc9403f9218bc61be941a0c3, 08a3f02fea636e97a7422d1512f76dacdb5b0887 | ||
| Linux | Kernel | >= 4.4.0, < 6.6.160; >= 6.7.0, < 6.12.113; >= 6.13.0, < 6.18.57; >= 6.19.0, < 7.2.11 | 6.6.160, 6.12.113, 6.18.57, 7.2.11 |
Linux distribution status
References (8)
- https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git OSV
- https://git.kernel.org/stable/c/08a3f02fea636e97a7422d1512f76dacdb5b0887 NVD, CNA, OSV
- https://git.kernel.org/stable/c/2e0c8c60a11b3177e7432c71d41249e276a0825f NVD, CNA, OSV
- https://git.kernel.org/stable/c/47ca6395a1d91545cc9403f9218bc61be941a0c3 NVD, CNA, OSV
- https://git.kernel.org/stable/c/7b79131e357c4786765b20a994ad40d4d35f2163 NVD, CNA, OSV
- https://git.kernel.org/stable/c/eef16a74ff8ed2a838d6bb862bb2c7783fce7466 NVD, CNA, OSV
- https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/99xxx/CVE-2026-99061.json OSV
- https://nvd.nist.gov/vuln/detail/CVE-2026-99061 OSV