Sceawere

Vulnerability Detail

CVE-2026-93287UPDATED Verified Sceawere Triage Sources: NVD / CISA KEV

Linux Kernel SMBus Out-of-Bounds Access

Vulnerability Metadata

Severity
High
Score / CVSS
7.8
Creation Date
16h ago
Vendor
Linux
Product
Linux
Attack Type
N/A
Vector String
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Attack Complexity
LOW

Narrative and Response

Description

In the Linux kernel, the following vulnerability has been resolved: i2c: smbus: reject oversized block transfers in the common path The SMBus block transfer length data->block[0] is validated in i2c_smbus_xfer_emulated() but that check runs too late for tracepoints and is skipped entirely when the adapter provides a native smbus_xfer implementation. This allows user-controlled oversized block lengths to reach tracepoint memcpy calls and driver callbacks unchecked. Add an early validation in __i2c_smbus_xfer() that rejects block transfers whose caller-supplied length is zero or exceeds I2C_SMBUS_BLOCK_MAX before any tracepoint fires or driver callback runs. data->block[0] is filled in by the device on SMBus block reads, so the check is scoped to operations where the length is actually supplied by the caller. This is consistent with the existing -EINVAL convention in the emulated path and protects all downstream consumers at once: the smbus_write tracepoint, all native smbus_xfer driver implementations, and the emulated path. Two distinct bugs are fixed by this change: Bug 1: smbus_write tracepoint OOB (include/trace/events/smbus.h) trace_smbus_write() fires before any validation and copies data->block[0]+1 bytes into a 34-byte event buffer. With block[0]=0xfe the tracepoint copies 255 bytes, overflowing by 221. BUG: KASAN: stack-out-of-bounds in trace_event_raw_event_smbus_write+0x27c/0x530 Read of size 255 at addr ffff88800d98fcf8 by task poc_smbus/91 Call Trace: <TASK> __asan_memcpy+0x23/0x80 trace_event_raw_event_smbus_write+0x27c/0x530 __i2c_smbus_xfer+0x43a/0xa40 i2c_smbus_xfer+0x19e/0x340 i2cdev_ioctl_smbus+0x38f/0x7f0 i2cdev_ioctl+0x35e/0x680 __x64_sys_ioctl+0x147/0x1e0 do_syscall_64+0xcf/0x15a0 entry_SYSCALL_64_after_hwframe+0x76/0x7e </TASK> Bug 2: i2c-stub I2C_SMBUS_I2C_BLOCK_DATA OOB (drivers/i2c/i2c-stub.c) stub_xfer() implements .smbus_xfer directly and only clamps block[0] against 256-command, not I2C_SMBUS_BLOCK_MAX. With block[0]=0xff and command=0 the loop accesses block[1+i] for i up to 254, far past the 34-byte union. UBSAN: array-index-out-of-bounds in drivers/i2c/i2c-stub.c:223:44 index 34 is out of range for type '__u8 [34]' Call Trace: <TASK> __ubsan_handle_out_of_bounds+0xd7/0x120 stub_xfer+0x1971/0x198f [i2c_stub] __i2c_smbus_xfer+0x306/0xa40 i2c_smbus_xfer+0x19e/0x340 i2cdev_ioctl_smbus+0x38f/0x7f0 i2cdev_ioctl+0x35e/0x680 __x64_sys_ioctl+0x147/0x1e0 do_syscall_64+0xcf/0x15a0 entry_SYSCALL_64_after_hwframe+0x76/0x7e </TASK> Both traces reproduced on v7.0-rc6+i2c/for-current with KASAN+UBSAN.

Executive Summary

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Executive Summary Locked

Sign up to unlock professional threat analysis, mitigations, and indicator signatures.

Technical Details

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Detailed Technical Analysis Locked

Sign up to unlock professional threat analysis, mitigations, and indicator signatures.

Mitigations

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Remediation & Mitigations Locked

Sign up to unlock professional threat analysis, mitigations, and indicator signatures.

References

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Intelligence References Locked

Sign up to unlock professional threat analysis, mitigations, and indicator signatures.

Additional Metadata

{
  "score": "7.8",
  "pubDate": "2026-09-24T17:17:09.930Z",
  "pubdate": "2026-09-24T17:17:09.930Z",
  "executiveSummary": "The Linux kernel's I2C subsystem is affected by a critical input validation vulnerability in the SMBus block transfer path. The issue involves improper handling of user-supplied block lengths, which leads to out-of-bounds (OOB) memory access.\nThis vulnerability is categorized as an improper validation of array index, allowing an attacker to trigger OOB reads and memory corruption.\nThe impact includes potential information disclosure or kernel memory corruption, leading to system instability or a potential denial-of-service (DoS) condition.\nAffected systems include any Linux kernel version where the I2C subsystem processes SMBus transfers without performing early validation of the 'data->block[0]' length field.\nExploitation requires an attacker to have sufficient privileges to interact with the I2C character device (typically /dev/i2c-X), enabling them to supply crafted ioctl payloads. The vulnerability is triggered during both tracepoint logging and native driver execution, as the length check was previously missing in the common code path.\nThe risk is elevated because the vulnerability exists in a common code path, affecting multiple drivers and internal tracing mechanisms simultaneously.",
  "technicalDetails": "The root cause of this vulnerability is the absence of comprehensive input validation in the '__i2c_smbus_xfer()' function within the Linux kernel's I2C subsystem. Previously, SMBus block transfer validation occurred too late, specifically within 'i2c_smbus_xfer_emulated()', or was completely bypassed when an adapter utilized a native 'smbus_xfer' implementation.\nWhen a user performs an SMBus block write via an ioctl call (e.g., via i2c-dev), they control the 'data->block[0]' field, which dictates the number of bytes to be transferred. Because the validation check was not performed at the entry point of the transfer, malicious or malformed length values (up to 0xff) are propagated into downstream components.\nThe vulnerability manifests in two primary ways:\n1. Tracepoint Overflow: The 'trace_smbus_write()' function is invoked before any validation. It performs a 'memcpy' operation using the user-provided length into a fixed-size 34-byte event buffer. By setting the block length to a value like 0xfe, an attacker triggers a buffer overflow of approximately 221 bytes, resulting in a KASAN-detected stack-out-of-bounds error.\n2. Driver-Level OOB Access: Native drivers, such as 'i2c-stub', may implement their own 'smbus_xfer' logic. In 'stub_xfer()', the provided length was only checked against a 256-command limit rather than the defined 'I2C_SMBUS_BLOCK_MAX' constant. This allows the driver to loop and access indices far beyond the allocated 34-byte union, leading to a UBSAN-detected array-index-out-of-bounds error.\nThe attack flow follows this sequence: 1) The user opens an I2C device node; 2) The user initiates an IOCTL call with a crafted 'i2c_smbus_ioctl_data' structure containing a malicious 'block[0]' value; 3) The kernel executes '__i2c_smbus_xfer()' without the necessary bounds checks; 4) The 'trace_smbus_write' tracepoint is triggered, causing a stack buffer overflow; 5) The execution flow continues to the specific I2C adapter driver, which performs further out-of-bounds memory access during the data transfer process.\nThis vulnerability bypasses standard safety mechanisms, as it exposes the kernel's internal memory management to user-controlled lengths before the driver layer can even attempt to sanitize the input."
}
CVE-2026-93287: Linux Kernel SMBus Out-of-Bounds Access (HIGH Severity, CVSS: 7.8) | Sceawere