Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-64586

CVE-2026-64586: Linux Kernel Race Condition Vulnerability

CVE-2026-64586 is a race condition flaw in the Linux kernel's brcmfmac WiFi driver that can cause use-after-free issues during device removal. This article covers the technical details, affected systems, and mitigation.

Published:

CVE-2026-64586 Overview

CVE-2026-64586 is a use-after-free vulnerability in the Linux kernel brcmfmac Wi-Fi driver for Broadcom FullMAC chipsets. The flaw resides in the handling of the drvr->bus_reset work item, which can outlive the drvr structure when a device is removed while a reset callback is pending or running. Both brcmf_fw_crashed() and the debugfs reset entry schedule this work, whose callback dereferences drvr through container_of(). The removal path frees drvr via brcmf_free and wiphy_free without draining the work first, creating a use-after-free window across PCIe, SDIO, and USB buses.

Critical Impact

A pending or running bus_reset callback can dereference freed driver memory during device removal, leading to kernel memory corruption on systems using Broadcom FullMAC Wi-Fi hardware.

Affected Products

  • Linux kernel brcmfmac Wi-Fi driver (Broadcom FullMAC)
  • PCIe, SDIO, and USB bus implementations within brcmfmac
  • Distributions shipping vulnerable Linux kernel versions prior to the fix commits

Discovery Timeline

  • 2026-08-06 - CVE-2026-64586 published to NVD
  • 2026-08-06 - Last updated in NVD database

Technical Details for CVE-2026-64586

Vulnerability Analysis

The brcmfmac driver schedules a bus_reset work item from two producers: brcmf_fw_crashed(), invoked when firmware halts, and the debugfs reset entry, invoked from user space. The work callback recovers the drvr pointer via container_of() and dereferences it to drive teardown. On device removal, brcmf_free() and wiphy_free() release drvr without draining any pending or running instance of the work item, so a delayed callback can access freed memory [CWE-416].

Cancellation cannot be added inside brcmf_detach() or brcmf_free() because the work callback itself reaches teardown through the bus .reset operation. On PCIe, that path runs brcmf_pcie_reset -> brcmf_detach; on SDIO it runs brcmf_sdio_bus_reset -> brcmf_sdiod_remove -> brcmf_free. Cancelling from inside these functions would wait for the running work and deadlock.

Root Cause

The root cause is missing lifetime coordination between the shared bus_reset work item and the drvr object it dereferences. There is no atomic step that both marks the bus as removing and drains the work, so a producer can arm the work after removal has begun.

Attack Vector

A local attacker with access to trigger firmware crashes or the debugfs reset entry can race a device removal to force the work callback to dereference freed memory. On PCIe systems, the firmware-halt notification runs in the threaded IRQ handler brcmf_pcie_isr_thread. On SDIO, the hostmail path runs from the data workqueue and can also report firmware halts through brcmf_fw_crashed(). USB systems reach the work through the debugfs reset entry.

The issue was identified by an in-house static analysis tool. No public exploit is available.

No verified proof-of-concept code is available. See the referenced
kernel commits for the exact source-level fix.

Detection Methods for CVE-2026-64586

Indicators of Compromise

  • Kernel oops or panic traces referencing brcmf_bus_reset or container_of inside the brcmfmac module during device removal or firmware recovery.
  • KASAN use-after-free reports naming drvr, brcmf_pcie_reset, brcmf_sdiod_remove, or brcmf_fw_crashed on kernels built with sanitizers enabled.
  • Repeated firmware crash log entries from brcmfmac immediately preceding driver unload or suspend cycles.

Detection Strategies

  • Enable KASAN on test kernels running affected brcmfmac versions and exercise device removal, suspend, and debugfs reset writes to surface the use-after-free.
  • Audit installed kernel packages against the fix commits 177a25be1195 and 43b25879f004 to identify unpatched hosts.
  • Monitor dmesg and journal output for brcmfmac firmware halt messages correlated with hotplug or suspend events.

Monitoring Recommendations

  • Collect kernel ring buffer output centrally and alert on brcmfmac crash signatures tied to reset or removal paths.
  • Track kernel version inventory across Linux endpoints to confirm patched builds are deployed on systems with Broadcom Wi-Fi hardware.
  • Include debugfs write activity to brcmfmac reset entries in host telemetry where debugfs is exposed.

How to Mitigate CVE-2026-64586

Immediate Actions Required

  • Apply the upstream fix commits 177a25be1195f8bdc6160ba5f1a5699f7041c985 and 43b25879f004c98defa2776bedc6ca4763c51945 or update to a distribution kernel that includes them.
  • Restrict access to debugfs on production systems so unprivileged users cannot write to the brcmfmacreset entry.
  • Prioritize patching on laptops, embedded devices, and IoT hardware that use Broadcom FullMAC Wi-Fi chipsets.

Patch Information

The fix introduces a per-bus mutex bus_reset_lock and routes all arming of the work through brcmf_bus_schedule_reset(), which skips scheduling when the bus is marked removing. Each bus remove entry calls brcmf_bus_cancel_reset_work(), which sets the removing flag and cancels the work under the same lock, making the set-removing and drain step atomic. The patch also guards brcmf_fw_crashed() against a NULL bus_if or drvr, since it can fire before brcmf_attach() wires up drvr. See Kernel Git Commit 177a25be and Kernel Git Commit 43b25879.

Workarounds

  • Unload the brcmfmac module (modprobe -r brcmfmac) on systems that do not require Broadcom Wi-Fi until a patched kernel is installed.
  • Mount debugfs with restrictive permissions or disable it entirely to block user-space triggering of the reset entry.
  • Avoid hotplug and suspend cycles on unpatched systems experiencing repeated firmware crashes.
bash
# Verify the running kernel and brcmfmac module status
uname -r
modinfo brcmfmac | grep -E 'filename|version'

# Temporarily unload the driver until a patched kernel is applied
sudo modprobe -r brcmfmac

# Restrict debugfs access to root only
sudo mount -o remount,mode=700 /sys/kernel/debug

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.