All vulnerabilities
CVE-2026-99061

Linux: wifi: brcmfmac: fix P2P device removal race in brcmf_detach()

Linux LinuxOperating systems
CVSS
NoneNot scored
ExploitationNo known exploitationNot in CISA KEV, which does not prove it is unexploitedCISA KEV
Exploit odds (EPSS)No scoreNo FIRST EPSS score in this snapshot yet
Fixed in7b79131e357c4786765b20a994ad40d4d35f2163Also 2e0c8c60a11b3177e7432c71d41249e276a0825f, 47ca6395a1d91545cc9403f9218bc61be941a0c3 and 1 moreCVE List
Published23 Oct 2026Updated 23 Oct 2026CVE List

What fixes it

  • 7b79131e357c4786765b20a994ad40d4d35f2163LinuxCVE List
  • 2e0c8c60a11b3177e7432c71d41249e276a0825fLinuxCVE List
  • 47ca6395a1d91545cc9403f9218bc61be941a0c3LinuxCVE List
  • 08a3f02fea636e97a7422d1512f76dacdb5b0887LinuxCVE List

A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.

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").

  1. 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.

Text from CVE List

Affected versions 12

  • Linuxaffected: 9831bcb987df4aff6a1d85975f1dda4c654f298d before 7b79131e357c4786765b20a994ad40d4d35f2163CVE List
  • Linuxaffected: 9831bcb987df4aff6a1d85975f1dda4c654f298d before 2e0c8c60a11b3177e7432c71d41249e276a0825fCVE List
  • Linuxaffected: 9831bcb987df4aff6a1d85975f1dda4c654f298d before eef16a74ff8ed2a838d6bb862bb2c7783fce7466CVE List
  • Linuxaffected: 9831bcb987df4aff6a1d85975f1dda4c654f298d before 47ca6395a1d91545cc9403f9218bc61be941a0c3CVE List
  • Linuxaffected: 9831bcb987df4aff6a1d85975f1dda4c654f298d before 08a3f02fea636e97a7422d1512f76dacdb5b0887CVE List
  • Linuxaffected: 4.4CVE List
  • Linuxunaffected: all versions before 4.4CVE List
  • Linuxunaffected: 6.6.160 through 6.6.*CVE List
  • Linuxunaffected: 6.12.113 through 6.12.*CVE List
  • Linuxunaffected: 6.18.57 through 6.18.*CVE List
  • Linuxunaffected: 7.2.11 through 7.2.*CVE List
  • Linuxunaffected: 7.3CVE List

References 5