UBUNTU-CVE-2026-97977: Medium severity ubuntu/linux-hwe-edge vulnerability
In the Linux kernel, the following vulnerability has been resolved: Bluetooth: btusb: Fix UAF of btusbdata by rxwork btusbclose() and btusbflush() cancel data->rxwork with the asynchronous canceldelayedwork(), so if btusbrxwork() is already running on another CPU it keeps running after the cancel returns. btusbdisconnect() calls hciunregisterdev(), which invokes btusbclose(), and then frees the btusbdata. A still running btusbrxwork() then dereferences the freed data: while ((skb = skbdequeue(&data->aclq))) data->recvacl(data->hdev, skb); Use canceldelayedworksync() instead. In btusbclose() the cancel also has to happen after btusbstoptraffic(), otherwise an URB completion racing with the cancel can requeue the work right after it has been waited for.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
ubuntu/linux-hwe-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-42.42~24.04.1 - Upgrade
Upgrade
ubuntu/linux-riscv-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-42.42.1~24.04.1 - Upgrade
Upgrade
ubuntu/linuxto a version that resolves this vulnerability.Fixed in 7.0.0-42.42 - Upgrade
Upgrade
ubuntu/linux-awsto a version that resolves this vulnerability.Fixed in 7.0.0-1016.17 - Upgrade
Upgrade
ubuntu/linux-gcpto a version that resolves this vulnerability.Fixed in 7.0.0-1016.18 - Upgrade
Upgrade
ubuntu/linux-ibmto a version that resolves this vulnerability.Fixed in 7.0.0-1017.17 - Upgrade
Upgrade
ubuntu/linux-oem-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-1017.17 - Upgrade
Upgrade
ubuntu/linux-oracleto a version that resolves this vulnerability.Fixed in 7.0.0-1015.16 - Upgrade
Upgrade
ubuntu/linux-riscvto a version that resolves this vulnerability.Fixed in 7.0.0-42.42.1 - Compensating control
In btusb_close(), call cancel_delayed_work_sync() for data->rx_work instead of cancel_delayed_work(), and perform the cancellation after btusb_stop_traffic() to prevent btusb_rx_work() from accessing freed btusb_data or being requeued by a racing URB completion.