---
id: "CVE-2026-98461"
kind: "vulnerability"
aliases: ["CVE-2026-98461"]
title: "Linux kernel: Bluetooth socket filter reads past short HCI events"
severity: "unknown"
cvss: null
epss: null
exploited: false
status: "open"
category: "infrastructure"
products: []
ecosystems: []
tags: ["bluetooth", "infrastructure", "linux-kernel", "self-hosted"]
not_affected_if: ["no-bluetooth-hardware"]
published_at: "2026-10-18T16:16:56+00:00"
first_seen_at: "2026-10-23T21:57:15+00:00"
updated_at: "2026-10-25T05:27:14+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-98461", "first_seen_at": "2026-10-23T21:57:15+00:00"}]
---

# Linux kernel: Bluetooth socket filter reads past short HCI events

The Linux kernel Bluetooth HCI socket filter reads event bytes before checking the packet length, so a malformed event from a controller or vhci device can cause an out-of-bounds read. The sources describe a read of memory outside the packet; they do not state a confirmed code execution or data leak.

_Summary, check and fix written by a model from the sources; labelled as such._

## Timeline

- 2026-10-23T21:57:15+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-98461

## From the sources

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

Bluetooth: hci_sock: validate event length before filtering

is_filtered_packet() reads the event code from skb->data[0] without first
checking that the skb is nonempty. When an opcode filter is configured,
it also reads the command opcode at offsets 3 or 4 without checking that
a Command Complete or Command Status event is long enough.

hci_send_to_sock() invokes the filter before hci_event_packet() validates
the event header. A malformed event supplied by a controller or a vhci
device can therefore cause an out-of-bounds read.

Keep the unmasked event code for the opcode checks. The masked value is
needed for the 64-bit event bitmap, but using it to identify command events
aliases event codes above 0x3f. In particular, Synchronous Train Complete
(0x4f) was treated as Command Status (0x0f) even though its payload has no
opcode.

Reject actual command events that are too short for the field being
inspected. A truncated command event cannot match a configured opcode.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
