KernelScan.io

HIGH Introduced in 5.2

btmtksdio TxPacket OOB

CVE-2026-90090

CVSS 7.3 / 10.0 KernelScan AI

CVSS:3.1/AV:A/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H

01

In the Linux kernel, the following vulnerability has been resolved: Bluetooth: btmtksdio: Fix out-of-bounds DMA read in the TX path btmtksdio_tx_packet() rounds the transfer size up to the SDIO block size of 256 bytes, but hands the host controller the SKB buffer as is: err = sdio_writesb(bdev->func, MTK_REG_CTDR, skb->data, round_up(skb->len, MTK_SDIO_BLOCK_SIZE)); Only skb->len bytes hold packet data, so the controller reads up to 255 bytes of uninitialised memory and sends it to the device over the SDIO bus. Depending on how much tailroom slack the SKB allocation happens to carry, that read can also extend past the end of the buffer. Compute the padded length up front, ensure the SKB has tailroom for it, and zero-fill the padding with skb_put_zero(). skb->len then covers the padding, so sdio_writesb() no longer needs to round up. byte_tx keeps counting the header and the payload only, and the error path restores the SKB so that the caller can requeue it. Writing behind skb->tail is only safe because the driver owns the buffer, which "Bluetooth: btmtksdio: Take exclusive ownership of the SKB before TX" ensures.

02

Engine v0.6.0

Risk summary

A Bluetooth SDIO driver transmits up to 255 bytes of uninitialized or out-of-bounds memory to the device on every TX packet. An attacker who can trigger Bluetooth transmission can leak kernel memory contents and potentially corrupt device state. The bug requires a system with a MediaTek MT7663S/MT7668S SDIO Bluetooth controller.

Affecteddrivers/bluetooth/btmtksdio.c (Bluetooth)

Vulnerability analysis

The MediaTek SDIO Bluetooth driver rounds every transmit transfer up to a 256-byte block boundary but passes the raw socket buffer to the host controller without ensuring it has enough tail room. The controller then DMA-reads past the valid packet data, sending up to 255 bytes of uninitialized memory—or, when the allocation has insufficient slack, bytes beyond the buffer entirely—over the SDIO bus to the Bluetooth device. The fix computes the padding length before transmission, expands the buffer if needed, zero-fills the padding so no stale memory leaves the host, and adjusts the transfer size and error path accordingly. The vulnerable path is reached whenever the kernel sends a Bluetooth packet on a system with a MediaTek MT7663S or MT7668S SDIO Bluetooth controller; it does not require special privileges beyond local access to the Bluetooth stack.

03

BranchIntroducedFixed inPatch commit
6.65.26.6.1570b71a6caaf28
6.125.26.12.1109a785ea86421
6.185.26.18.527b37556d7d80
mainline5.27.3-rc1fa0ad2d277c7
7.25.27.2.67b80d2701a68
6.15.26.1.188c8742f53c9ef
cip/6.125.26.12.111-cip329a785ea86421