{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2025-40000", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2025-04-16T07:20:57.151Z", "datePublished": "2025-10-15T07:59:14.606Z", "dateUpdated": "2026-08-05T12:07:02.267Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T12:07:02.267Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nwifi: rtw89: fix use-after-free in rtw89_core_tx_kick_off_and_wait()\n\nThere is a bug observed when rtw89_core_tx_kick_off_and_wait() tries to\naccess already freed skb_data:\n\n BUG: KFENCE: use-after-free write in rtw89_core_tx_kick_off_and_wait drivers/net/wireless/realtek/rtw89/core.c:1110\n\n CPU: 6 UID: 0 PID: 41377 Comm: kworker/u64:24 Not tainted 6.17.0-rc1+ #1 PREEMPT(lazy)\n Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS edk2-20250523-14.fc42 05/23/2025\n Workqueue: events_unbound cfg80211_wiphy_work [cfg80211]\n\n Use-after-free write at 0x0000000020309d9d (in kfence-#251):\n rtw89_core_tx_kick_off_and_wait drivers/net/wireless/realtek/rtw89/core.c:1110\n rtw89_core_scan_complete drivers/net/wireless/realtek/rtw89/core.c:5338\n rtw89_hw_scan_complete_cb drivers/net/wireless/realtek/rtw89/fw.c:7979\n rtw89_chanctx_proceed_cb drivers/net/wireless/realtek/rtw89/chan.c:3165\n rtw89_chanctx_proceed drivers/net/wireless/realtek/rtw89/chan.h:141\n rtw89_hw_scan_complete drivers/net/wireless/realtek/rtw89/fw.c:8012\n rtw89_mac_c2h_scanofld_rsp drivers/net/wireless/realtek/rtw89/mac.c:5059\n rtw89_fw_c2h_work drivers/net/wireless/realtek/rtw89/fw.c:6758\n process_one_work kernel/workqueue.c:3241\n worker_thread kernel/workqueue.c:3400\n kthread kernel/kthread.c:463\n ret_from_fork arch/x86/kernel/process.c:154\n ret_from_fork_asm arch/x86/entry/entry_64.S:258\n\n kfence-#251: 0x0000000056e2393d-0x000000009943cb62, size=232, cache=skbuff_head_cache\n\n allocated by task 41377 on cpu 6 at 77869.159548s (0.009551s ago):\n __alloc_skb net/core/skbuff.c:659\n __netdev_alloc_skb net/core/skbuff.c:734\n ieee80211_nullfunc_get net/mac80211/tx.c:5844\n rtw89_core_send_nullfunc drivers/net/wireless/realtek/rtw89/core.c:3431\n rtw89_core_scan_complete drivers/net/wireless/realtek/rtw89/core.c:5338\n rtw89_hw_scan_complete_cb drivers/net/wireless/realtek/rtw89/fw.c:7979\n rtw89_chanctx_proceed_cb drivers/net/wireless/realtek/rtw89/chan.c:3165\n rtw89_chanctx_proceed drivers/net/wireless/realtek/rtw89/chan.c:3194\n rtw89_hw_scan_complete drivers/net/wireless/realtek/rtw89/fw.c:8012\n rtw89_mac_c2h_scanofld_rsp drivers/net/wireless/realtek/rtw89/mac.c:5059\n rtw89_fw_c2h_work drivers/net/wireless/realtek/rtw89/fw.c:6758\n process_one_work kernel/workqueue.c:3241\n worker_thread kernel/workqueue.c:3400\n kthread kernel/kthread.c:463\n ret_from_fork arch/x86/kernel/process.c:154\n ret_from_fork_asm arch/x86/entry/entry_64.S:258\n\n freed by task 1045 on cpu 9 at 77869.168393s (0.001557s ago):\n ieee80211_tx_status_skb net/mac80211/status.c:1117\n rtw89_pci_release_txwd_skb drivers/net/wireless/realtek/rtw89/pci.c:564\n rtw89_pci_release_tx_skbs.isra.0 drivers/net/wireless/realtek/rtw89/pci.c:651\n rtw89_pci_release_tx drivers/net/wireless/realtek/rtw89/pci.c:676\n rtw89_pci_napi_poll drivers/net/wireless/realtek/rtw89/pci.c:4238\n __napi_poll net/core/dev.c:7495\n net_rx_action net/core/dev.c:7557 net/core/dev.c:7684\n handle_softirqs kernel/softirq.c:580\n do_softirq.part.0 kernel/softirq.c:480\n __local_bh_enable_ip kernel/softirq.c:407\n rtw89_pci_interrupt_threadfn drivers/net/wireless/realtek/rtw89/pci.c:927\n irq_thread_fn kernel/irq/manage.c:1133\n irq_thread kernel/irq/manage.c:1257\n kthread kernel/kthread.c:463\n ret_from_fork arch/x86/kernel/process.c:154\n ret_from_fork_asm arch/x86/entry/entry_64.S:258\n\nIt is a consequence of a race between the waiting and the signaling side\nof the completion:\n\n Waiting thread Completing thread\n\nrtw89_core_tx_kick_off_and_wait()\n rcu_assign_pointer(skb_data->wait, wait)\n /* start waiting */\n wait_for_completion_timeout()\n rtw89_pci_tx_status()\n rtw89_core_tx_wait_complete()\n rcu_read_lock()\n /* signals completion and\n \n---truncated---" } ], "metrics": [ { "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H", "baseScore": 8.8, "baseSeverity": "HIGH" }, "scenarios": [ { "lang": "en", "value": "AV:A - The bug lives in the rtw89 WiFi driver and is armed/timed by over-the-air events — scan completion after deauth-forced reconnects, MCC beacon-loss probing, and medium congestion that shifts nullfunc TX-status latency into the 30 ms timeout window. An attacker must be within wireless range of the victim, which is the adjacent-network case.\nAC:L - The attacker influences both sides of the race: deauth/disassoc floods force endless scan→scan-complete cycles that re-arm the UAF, while channel congestion and RX flooding tune the TX-completion latency against the 30 ms wait and delay the waiter's wakeup. Retries are free and unlimited, and the race was observed firing spontaneously under ordinary traffic in the KFENCE report.\nPR:N - Deauthentication/disassociation injection and channel congestion require no credentials on the victim network, and the scan/roam/MCC-probe paths that trigger the nullfunc TX run automatically without any attacker account on the target. No privileges of any kind are needed.\nUI:N - Background scans, roaming scans, reconnect-after-deauth, and MCC beacon-loss probing are all initiated automatically by the supplicant and firmware. The victim only needs an associated rtw89 WiFi interface, with no action on their part.\nS:U - The use-after-free corrupts kernel slab memory and is exploited entirely within the kernel's own security authority. No VM, IOMMU, or sandbox boundary is crossed.\nC:H - This is a use-after-free on a freed sk_buff in skbuff_head_cache, a cache the adjacent attacker can re-populate at will simply by transmitting frames. Corrupting length/offset/pointer fields of a replacement object can be leveraged into disclosure of kernel memory, so High is the appropriate rating for a UAF.\nI:H - The bug is an explicit use-after-free *write* — 8 zero bytes at a fixed offset into a freed 232-byte slab object that the attacker can groom. Zeroing a pointer or refcount in the replacement object gives heap corruption chains suitable for control-flow hijacking, so integrity impact is High.\nA:H - The use-after-free write corrupts arbitrary reallocated slab objects and reliably produces oopses and kernel panics, as demonstrated by the KFENCE report. Any kernel crash rates High." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "drivers/net/wireless/realtek/rtw89/core.c", "drivers/net/wireless/realtek/rtw89/core.h", "drivers/net/wireless/realtek/rtw89/pci.c", "drivers/net/wireless/realtek/rtw89/ser.c" ], "versions": [ { "version": "1ae5ca615285d5d4f72d1de464716d85dffef19f", "lessThan": "895cccf639ac015f3d5f993218cf098db82ac145", "status": "affected", "versionType": "git" }, { "version": "1ae5ca615285d5d4f72d1de464716d85dffef19f", "lessThan": "f21f530b03b4b23448edb531a0cfea434cb76bb4", "status": "affected", "versionType": "git" }, { "version": "1ae5ca615285d5d4f72d1de464716d85dffef19f", "lessThan": "bdb3c41b358cf87d99e39d393e164f9e4a6088e6", "status": "affected", "versionType": "git" }, { "version": "1ae5ca615285d5d4f72d1de464716d85dffef19f", "lessThan": "3e31a6bc07312b448fad3b45de578471f86f0e77", "status": "affected", "versionType": "git" } ] }, { "product": "Linux", "vendor": "Linux", "defaultStatus": "affected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "drivers/net/wireless/realtek/rtw89/core.c", "drivers/net/wireless/realtek/rtw89/core.h", "drivers/net/wireless/realtek/rtw89/pci.c", "drivers/net/wireless/realtek/rtw89/ser.c" ], "versions": [ { "version": "6.4", "status": "affected" }, { "version": "0", "lessThan": "6.4", "status": "unaffected", "versionType": "semver" }, { "version": "6.12.52", "lessThanOrEqual": "6.12.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.16.12", "lessThanOrEqual": "6.16.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.17.1", "lessThanOrEqual": "6.17.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.18", "lessThanOrEqual": "*", "status": "unaffected", "versionType": "original_commit_for_fix" } ] } ], "cpeApplicability": [ { "nodes": [ { "operator": "OR", "negate": false, "cpeMatch": [ { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.4", "versionEndExcluding": "6.12.52" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.4", "versionEndExcluding": "6.16.12" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.4", "versionEndExcluding": "6.17.1" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.4", "versionEndExcluding": "6.18" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/895cccf639ac015f3d5f993218cf098db82ac145" }, { "url": "https://git.kernel.org/stable/c/f21f530b03b4b23448edb531a0cfea434cb76bb4" }, { "url": "https://git.kernel.org/stable/c/bdb3c41b358cf87d99e39d393e164f9e4a6088e6" }, { "url": "https://git.kernel.org/stable/c/3e31a6bc07312b448fad3b45de578471f86f0e77" } ], "title": "wifi: rtw89: fix use-after-free in rtw89_core_tx_kick_off_and_wait()", "x_generator": { "engine": "bippy-1.2.0" } } } }