CVE-2026-93209: Bluetooth: hci_core: use skb_get() instead of skb_clone() for req_skb

Published Sep 24, 2026
·
Updated

In the Linux kernel, the following vulnerability has been resolved:

Bluetooth: hcicore: use skbget() instead of skbclone() for reqskb

BT enable fails intermittently with -ETIMEDOUT (-110). The kernel log shows the HCI Read Local Version command was sent and the firmware replied with status 0x00 (logged by hcireqcmdcomplete() BTDBG), but the waiter in hcicmdsyncsk() never woke up and timed out after 10 s:

bluetooth hci0: Opcode 0xfc00 // hcicmdsyncsk bluetooth hci0: opcode 0xfc00 plen 1 // hcicmdsyncadd bluetooth hci0: skb len 4 // hcicmdsyncalloc bluetooth hci0: length 1 // hcireqsyncrun Bluetooth: hci0 cmdcnt 1 cmd queued 1 // hcicmdwork Bluetooth: hci0 type 1 len 4 // hcisendframe Bluetooth: opcode 0xfc00 status 0x00 // hcireqcmdcomplete <-- reqskb NULL: reqcompleteskb not set, hcicmdsynccomplete() never called, reqstatus stays HCIREQPEND --> <-- 10 s later: waiteventinterruptibletimeout expires --> bluetooth hci0: end: err -110 // hcicmdsyncsk

The root cause is that hcisendcmdsync() clones the sent command into hdev->reqskb so that hcireqcmdcomplete() can locate the registered completion callback. Under memory pressure this skbclone() fails, leaving hdev->reqskb NULL. The firmware reply is received and processed, but hcireqcmdcomplete() finds NULL reqskb, so hcicmdsynccomplete() is never called, reqstatus stays HCIREQPEND, and the waiter times out with -ETIMEDOUT.

reqskb is only used to read btcb(skb)->hci callbacks and opcode -- it is never modified. Replace skbclone() with skbget(), which simply increments the reference count of hdev->sentcmd without allocating new memory and therefore cannot fail.

This issue was first observed as a use-after-free in ttyportclose() when ttyportopen() failed, which was investigated in an earlier patch series [1]. That investigation led to the discovery of the true root cause described above.

[1] https://lore.kernel.org/all/20250430111617.1151390-1-quiccxin@quicinc.com/

Affected Software

1 affected component
Linux Linux kernel

Event History

Sep 24, 2026
CVE Published
via MITRE·03:10 PM
Data Sourced
via MITRE·03:10 PM
Description
Data Sourced
via NVD·04:17 PM
Description

Frequently Asked Questions

1

What operational symptom indicates this issue may be present?

Bluetooth enable can fail intermittently with -ETIMEDOUT (-110). The timeout occurs after the HCI command completion waiter is not awakened, despite firmware reporting status 0x00 for the command.

2

What log messages can help identify an affected failure?

The reported sequence includes an HCI command such as "Opcode 0xfc00", a successful "opcode 0xfc00 status 0x00" response, followed roughly 10 seconds later by "end: err -110". This combination indicates that the command response was received but synchronous command completion did not occur.

3

What condition contributes to the failure?

The described root cause involves cloning the sent command into hdev->req_skb. Under memory pressure, the clone operation can prevent the completion callback from being found, leaving the request pending until it times out.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203