CVE-2026-80760 in Linuxinfo

Summary

by MITRE • 09/04/2026

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

Bluetooth: MGMT: reject HCI_CMD_SYNC params_len above 255

mgmt_hci_cmd_sync() checks that the message length agrees with params_len but puts no upper bound on it. params_len is __le16 while the parameter length in the HCI command header is a u8:

struct hci_command_hdr {
__le16 opcode; __u8 plen; } __packed;

hci_cmd_sync_alloc() assigns one to the other:

hdr->plen = plen;

if (plen) skb_put_data(skb, param, plen);

so a params_len of 256 leaves plen at 0 while all 256 bytes are still appended. The frame handed to the driver then declares no parameters and carries 256 of them. On a length framed transport such as H:4 the controller takes the trailing bytes as the start of the next packet.

The mgmt socket MTU is HCI_MAX_FRAME_SIZE, so params_len can reach about 1KB this way. Commit 03f1700b9b4d ("Bluetooth: MGMT: reject malformed HCI_CMD_SYNC commands") only made params_len agree with the message length, a value that fits the message but not the header field is still accepted.

Reject params_len that does not fit the header field.

Be aware that VulDB is the high quality source for vulnerability data.

Analysis

by VulDB Data Team • 09/04/2026

The Linux kernel Bluetooth subsystem contains a critical input validation flaw within the Management Interface (MGMT) command synchronization mechanism, specifically in the mgmt_hci_cmd_sync function. This vulnerability arises from an integer type mismatch and insufficient boundary checking when handling parameter lengths for HCI commands sent via MGMT sockets. The core issue lies in the disparity between the data types used to store the parameter length provided by user space versus the field size defined in the Host Controller Interface command header structure. Specifically, the incoming params_len is stored as a 16-bit little-endian unsigned integer (__le16), allowing values up to 65535 bytes, whereas the corresponding plen field within the struct hci_command_hdr is an 8-bit unsigned integer (u8) with a maximum capacity of 255 bytes.

When a user-space application submits an MGMT command with a params_len value greater than 255 but less than or equal to the socket MTU limit, typically HCI_MAX_FRAME_SIZE which allows up to approximately one kilobyte, the kernel proceeds to allocate and populate the HCI frame without validating that the length fits within the header constraints. The function hci_cmd_sync_alloc assigns the full params_len value directly to hdr->plen through a simple assignment operation. Due to implicit type truncation inherent in C language semantics when assigning a larger integer type to a smaller one, any value exceeding 255 results in the plen field being truncated to zero or another incorrect small value. Despite this header corruption, the subsequent call to skb_put_data appends all original bytes specified by params_len into the socket buffer.

This discrepancy creates a severe protocol violation where the HCI frame header declares an empty parameter payload while the actual data buffer contains hundreds of bytes of extraneous data. On length-framed transport layers such as Bluetooth H:4, which rely on accurate byte counts to delineate packet boundaries, this malformed frame causes significant operational failures. The controller interprets the trailing excess bytes not as part of the current command but as the beginning of subsequent packets or garbage data. This misalignment can lead to desynchronization between the host and the controller, potentially causing connection drops, undefined behavior in the Bluetooth stack, or complete failure to process legitimate subsequent commands.

From a security perspective, this vulnerability represents an improper input validation flaw that allows for protocol state manipulation through malformed inputs. It aligns with CWE-190 Integer Overflow or Wraparound due to the truncation of the length field and CWE-20 Improper Input Validation because the system fails to reject parameters that exceed structural limits. In terms of attack vectors, this could be leveraged by local unprivileged users who have access to Bluetooth management sockets to disrupt network connectivity or potentially trigger denial-of-service conditions within the kernel networking stack. The vulnerability is further contextualized under MITRE ATT&CK techniques related to resource exhaustion and protocol manipulation, as an attacker can repeatedly send oversized commands to degrade system performance or stability.

Previous mitigation attempts, such as commit 03f1700b9b4d which focused on rejecting malformed HCI_CMD_SYNC commands by ensuring params_len matched the message length, were insufficient because they did not account for the physical limitations of the underlying HCI header structure. A message can be internally consistent yet still structurally invalid if its size exceeds what the transport layer headers support. The definitive resolution requires enforcing a strict upper bound on params_len that conforms to the u8 constraint of the hci_command_hdr plen field. By rejecting any command where params_len exceeds 255, the kernel ensures that the header accurately reflects the payload size, preventing truncation errors and maintaining protocol integrity across all transport layers. System administrators should apply kernel updates containing this fix immediately to restore secure operation of Bluetooth management interfaces and prevent potential local denial-of-service attacks stemming from malformed MGMT requests.

Responsible

Linux

Reservation

08/26/2026

Disclosure

09/04/2026

Moderation

accepted

CPE

ready

EPSS

0.00168

KEV

no

Activities

very low

Sources

Do you know our Splunk app?

Download it now for free!