---
id: CVE-2026-99061
title: 'wifi: brcmfmac: fix P2P device removal race in brcmf_detach()'
summary: |-
  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)…
severity: none
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= 9831bcb987df4aff6a1d85975f1dda4c654f298d <
    7b79131e357c4786765b20a994ad40d4d35f2163
  - >-
    Linux >= 9831bcb987df4aff6a1d85975f1dda4c654f298d <
    2e0c8c60a11b3177e7432c71d41249e276a0825f
  - >-
    Linux >= 9831bcb987df4aff6a1d85975f1dda4c654f298d <
    eef16a74ff8ed2a838d6bb862bb2c7783fce7466
  - >-
    Linux >= 9831bcb987df4aff6a1d85975f1dda4c654f298d <
    47ca6395a1d91545cc9403f9218bc61be941a0c3
  - >-
    Linux >= 9831bcb987df4aff6a1d85975f1dda4c654f298d <
    08a3f02fea636e97a7422d1512f76dacdb5b0887
  - Linux 4.4
published: '2026-10-23'
updated: '2026-10-23'
sourceUpdated: '2026-10-23T12:22:59.770Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-99061'
references:
  - url: 'https://git.kernel.org/stable/c/7b79131e357c4786765b20a994ad40d4d35f2163'
  - url: 'https://git.kernel.org/stable/c/2e0c8c60a11b3177e7432c71d41249e276a0825f'
  - url: 'https://git.kernel.org/stable/c/eef16a74ff8ed2a838d6bb862bb2c7783fce7466'
  - url: 'https://git.kernel.org/stable/c/47ca6395a1d91545cc9403f9218bc61be941a0c3'
  - url: 'https://git.kernel.org/stable/c/08a3f02fea636e97a7422d1512f76dacdb5b0887'
tags:
  - cve.org
ingestedAt: '2026-10-23T13:24:55.518Z'
---

## Overview

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

- `Linux >= 9831bcb987df4aff6a1d85975f1dda4c654f298d < 7b79131e357c4786765b20a994ad40d4d35f2163`
- `Linux >= 9831bcb987df4aff6a1d85975f1dda4c654f298d < 2e0c8c60a11b3177e7432c71d41249e276a0825f`
- `Linux >= 9831bcb987df4aff6a1d85975f1dda4c654f298d < eef16a74ff8ed2a838d6bb862bb2c7783fce7466`
- `Linux >= 9831bcb987df4aff6a1d85975f1dda4c654f298d < 47ca6395a1d91545cc9403f9218bc61be941a0c3`
- `Linux >= 9831bcb987df4aff6a1d85975f1dda4c654f298d < 08a3f02fea636e97a7422d1512f76dacdb5b0887`
- `Linux 4.4`

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.
