In the Linux kernel, the following vulnerability has been resolved:
wifi: brcmfmac: fix use-after-free when rescheduling brcmf_btcoex_info work
The brcmf_btcoex_detach() only shuts down the btcoex timer, if the flag timer_on is false. However, the brcmf_btcoex_timerfunc(), which runs as timer handler, sets timer_on to false. This creates critical race conditions:
1.If brcmf_btcoex_detach() is called while brcmf_btcoex_timerfunc() is executing, it may observe timer_on as false and skip the call to timer_shutdown_sync().
2.The brcmf_btcoex_timerfunc() may then reschedule the brcmf_btcoex_info worker after the cancel_work_sync() has been executed, resulting in use-after-free bugs.
The use-after-free bugs occur in two distinct scenarios, depending on the timing of when the brcmf_btcoex_info struct is freed relative to the execution of its worker thread.
Scenario 1: Freed before the worker is scheduled
The brcmf_btcoex_info is deallocated before the worker is scheduled. A race condition can occur when schedule_work(&bt_local->work) is called after the target memory has been freed. The sequence of events is detailed below:
CPU0 | CPU1 brcmf_btcoex_detach | brcmf_btcoex_timerfunc | bt_local->timer_on = false; if (cfg->btcoex->timer_on) | ... | cancel_work_sync(); | ... | kfree(cfg->btcoex); // FREE | | schedule_work(&bt_local->work); // USE
Scenario 2: Freed after the worker is scheduled
The brcmf_btcoex_info is freed after the worker has been scheduled but before or during its execution. In this case, statements within the brcmf_btcoex_handler() — such as the container_of macro and subsequent dereferences of the brcmf_btcoex_info object will cause a use-after-free access. The following timeline illustrates this scenario:
CPU0 | CPU1 brcmf_btcoex_detach | brcmf_btcoex_timerfunc | bt_local->timer_on = false; if (cfg->btcoex->timer_on) | ... | cancel_work_sync(); | ... | schedule_work(); // Reschedule | kfree(cfg->btcoex); // FREE | brcmf_btcoex_handler() // Worker /* | btci = container_of(....); // USE The kfree() above could | ... also occur at any point | btci-> // USE during the worker's execution| */ |
To resolve the race conditions, drop the conditional check and call timer_shutdown_sync() directly. It can deactivate the timer reliably, regardless of its current state. Once stopped, the timer_on state is then set to false.
CVSS Details
- CVSS 3.1 Base Score: 7.8
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Debian | — | Upgrade linux-6.1Upgrade linux | May 3, 2026 | May 3, 2026 |
| Oracle_linux | — | Upgrade kernel-uek | Nov 11, 2025 | Sep 19, 2025 |
| Redhat_linux | — | No solution exists | Jul 17, 2026 | Sep 19, 2025 |
| Suse | — | Upgrade dtb-nvidiaUpgrade kernel-64kb-extraUpgrade kernel-rt_debug-develUpgrade kernel-docs-htmlUpgrade kselftests-kmp-azureUpgrade dlm-kmp-defaultUpgrade kernel-debug-vdsoUpgrade kselftests-kmp-rtUpgrade kernel-rt_debugUpgrade kernel-default-livepatchUpgrade cluster-md-kmp-64kbUpgrade dtb-marvellUpgrade ocfs2-kmp-64kbUpgrade kernel-rtUpgrade reiserfs-kmp-rtUpgrade ocfs2-kmp-defaultUpgrade kernel-docsUpgrade kernel-rt-optionalUpgrade kernel-obs-buildUpgrade kernel-azure-develUpgrade kernel-azureUpgrade kernel-default-livepatch-develUpgrade dtb-qcomUpgrade kernel-default-baseUpgrade reiserfs-kmp-azureUpgrade dtb-caviumUpgrade dlm-kmp-rtUpgrade kernel-defaultUpgrade kernel-source-rtUpgrade dtb-alteraUpgrade kernel-default-base-rebuildUpgrade dtb-broadcomUpgrade kernel-kvmsmall-vdsoUpgrade dtb-allwinnerUpgrade kernel-source-vanillaUpgrade kernel-rt-extraUpgrade kernel-azure-optionalUpgrade gfs2-kmp-defaultUpgrade dtb-rockchipUpgrade reiserfs-kmp-64kbUpgrade kernel-rt-vdsoUpgrade dtb-sprdUpgrade gfs2-kmp-azureUpgrade kselftests-kmp-defaultUpgrade dlm-kmp-64kbUpgrade reiserfs-kmp-defaultUpgrade kernel-rt-develUpgrade kernel-rt_debug-vdsoUpgrade kernel-obs-qaUpgrade kernel-sourceUpgrade kernel-debugUpgrade dtb-socionextUpgrade dtb-hisiliconUpgrade kernel-kvmsmall-develUpgrade dtb-xilinxUpgrade cluster-md-kmp-defaultUpgrade dlm-kmp-azureUpgrade kernel-zfcpdumpUpgrade kernel-source-azureUpgrade kernel-devel-rtUpgrade kernel-default-optionalUpgrade kernel-default-extraUpgrade kernel-default-vdsoUpgrade kernel-debug-develUpgrade dtb-apmUpgrade kernel-rt-livepatch-develUpgrade kernel-64kbUpgrade dtb-renesasUpgrade dtb-appleUpgrade dtb-amlogicUpgrade cluster-md-kmp-rtUpgrade dtb-exynosUpgrade kernel-syms-azureUpgrade kernel-azure-extraUpgrade dtb-mediatekUpgrade dtb-amdUpgrade kernel-kvmsmallUpgrade cluster-md-kmp-azureUpgrade kselftests-kmp-64kbUpgrade kernel-devel-azureUpgrade kernel-default-develUpgrade kernel-azure-vdsoUpgrade kernel-64kb-optionalUpgrade kernel-64kb-develUpgrade kernel-rt-livepatchUpgrade kernel-syms-rtUpgrade ocfs2-kmp-azureUpgrade kernel-symsUpgrade kernel-macrosUpgrade kernel-default-manUpgrade dtb-amazonUpgrade dtb-lgUpgrade dtb-freescaleUpgrade ocfs2-kmp-rtUpgrade kernel-develUpgrade gfs2-kmp-rtUpgrade gfs2-kmp-64kbUpgrade dtb-arm | Dec 5, 2025 | Oct 15, 2025 |
| Ubuntu | — | Upgrade linux-image-oem-22.04dUpgrade linux-image-raspi-realtime-6.8Upgrade linux-image-6.8.0-1029-xilinxUpgrade linux-image-6.8.0-1049-ibmUpgrade linux-image-oracle-64k-lts-24.04Upgrade linux-image-awsUpgrade linux-image-6.8.0-1050-aws-fipsUpgrade linux-image-6.8.0-1052-gcpUpgrade linux-image-ibmUpgrade linux-image-fips-6.8Upgrade linux-image-realtimeUpgrade linux-image-lowlatency-6.8Upgrade linux-image-ibm-classicUpgrade linux-image-ibm-6.8Upgrade linux-image-generic-64k-6.8Upgrade linux-image-aws-64k-lts-24.04Upgrade linux-image-oracle-6.8Upgrade linux-image-gcp-lts-24.04Upgrade linux-image-gcp-64kUpgrade linux-image-6.8.0-1047-oracle-64kUpgrade linux-image-oem-22.04bUpgrade linux-image-gke-64kUpgrade linux-image-aws-lts-24.04Upgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-6.8.0-1052-gcp-fipsUpgrade linux-image-aws-fipsUpgrade linux-image-6.8.0-1050-awsUpgrade linux-image-lowlatency-hwe-22.04Upgrade linux-image-raspiUpgrade linux-image-nvidia-64k-6.8Upgrade linux-image-generic-hwe-22.04Upgrade linux-image-azure-fipsUpgrade linux-image-6.8.0-106-genericUpgrade linux-image-6.8.0-1050-raspiUpgrade linux-image-virtual-6.8Upgrade linux-image-oracleUpgrade linux-image-aws-64k-6.8Upgrade linux-image-realtime-6.8.1Upgrade linux-image-nvidia-lowlatencyUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-azure-lts-24.04Upgrade linux-image-aws-fips-6.8Upgrade linux-image-kvmUpgrade linux-image-6.8.0-2040-raspi-realtimeUpgrade linux-image-gcp-6.8Upgrade linux-image-genericUpgrade linux-image-generic-6.8Upgrade linux-image-gcp-fipsUpgrade linux-image-6.8.0-1048-gke-64kUpgrade linux-image-xilinx-6.8Upgrade linux-image-nvidia-hwe-22.04Upgrade linux-image-aws-6.8Upgrade linux-image-gcp-64k-6.8Upgrade linux-image-intel-iotgUpgrade linux-image-generic-64kUpgrade linux-image-6.8.0-1051-azureUpgrade linux-image-gkeop-6.8Upgrade linux-image-lowlatency-64kUpgrade linux-image-oem-22.04aUpgrade linux-image-nvidia-64kUpgrade linux-image-raspi-realtimeUpgrade linux-image-oracle-64k-6.8Upgrade linux-image-6.8.1-1045-realtimeUpgrade linux-image-oracle-lts-24.04 | Mar 17, 2026 | Sep 19, 2025 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Jul 22, 2026 | Sep 19, 2025 |
Prioritise with Active Threat Intelligence
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub