MEDIUM 5.5

CVE-2026-52948: Linux Kernel I2C Integer Overflow Local DoS

A flaw in the Linux kernel's I2C device driver allows a local user to crash the system or leave I2C/SMBus hardware in a broken state. The vulnerability stems from an integer overflow when the driver processes timeout values submitted through a system call. An attacker with local access can supply a specially crafted timeout value that bypasses validation checks, causing the driver to set an invalid timeout internally. This leads to premature timeouts and corrupts the SMBus state machine, effectively denying service to legitimate I2C operations.

Source data · NVD / CISA · public domain

CVSS
3.1 · 5.5 MEDIUM · CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Weaknesses (CWE)
CWE-190
Affected products
6 configuration(s)
Published / Modified
2026-06-24 / 2026-07-14

NVD description (verbatim)

In the Linux kernel, the following vulnerability has been resolved: i2c: dev: prevent integer overflow in I2C_TIMEOUT ioctl While fuzzing with Syzkaller, a persistent `schedule_timeout: wrong timeout value` warning was observed, accompanied by SMBus controller state machine corruption. The I2C_TIMEOUT ioctl accepts a user-provided timeout in multiples of 10 ms. The user argument is checked against INT_MAX, but it is subsequently multiplied by 10 before being passed to msecs_to_jiffies(). A malicious user can pass a large value (e.g., 429496729) that passes the `arg > INT_MAX` check but overflows when multiplied by 10. This results in a truncated 32-bit unsigned value that bypasses the internal `(int)m < 0` check in `msecs_to_jiffies()`. The truncated value is then assigned to `client->adapter->timeout` (a signed 32-bit int), which is reinterpreted as a negative number. When passed to wait_for_completion_timeout(), this negative value undergoes sign extension to a 64-bit unsigned long, triggering the `schedule_timeout` warning and causing premature returns. This leaves the SMBus state machine in an unrecoverable state, constituting a local Denial of Service (DoS). Fix this by bounding the user argument to `INT_MAX / 10`. [wsa: move the comment as well]

8 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

The i2c-dev driver's I2C_TIMEOUT ioctl handler validates user-supplied timeout arguments against INT_MAX but fails to account for subsequent multiplication by 10. A malicious argument (e.g., 429496729) passes the initial check but overflows to a small unsigned value when multiplied by 10 in a 32-bit context. This truncated value then bypasses the signed-integer check within msecs_to_jiffies(). When assigned to the adapter's timeout field (a signed 32-bit int), the value is reinterpreted as negative. Passing this negative timeout to wait_for_completion_timeout() triggers sign extension to 64-bit, causing schedule_timeout() to emit warnings and return immediately with unrecovered SMBus state. The fix restricts user arguments to INT_MAX / 10 before multiplication.

Business impact

Organizations relying on I2C or SMBus subsystems (common in embedded systems, IoT devices, and specialized hardware interfaces) face potential service disruption. A local attacker could render I2C devices unresponsive, disrupting sensor polling, hardware monitoring, or device communication. Physical recovery may require system reboot. In production environments where uptime is critical—such as industrial controllers or networked appliances—repeated exploitation could inflict repeated downtime. The attack requires local access, limiting exposure in hardened cloud environments but posing risk in multi-tenant or physically accessible systems.

Affected systems

Linux kernel across multiple versions (specific affected release ranges require verification against vendor advisories). Any system exposing the i2c-dev interface to untrusted local users is vulnerable. This includes IoT gateways, industrial controllers, and Linux systems where users or unprivileged processes have access to /dev/i2c-* character devices.

Exploitability

Exploitability is straightforward for local attackers with access to i2c-dev character device nodes. No special privileges are required beyond standard user-level capabilities; the ioctl call is available to any process with device file access. Proof-of-concept is trivial: craft and submit a single malformed ioctl request. No user interaction is required, no network component exists, and the attack executes synchronously. However, remote exploitation is not possible; the attacker must have local code execution.

Remediation

Apply the kernel patch that adds arithmetic bounds checking to enforce user argument ≤ INT_MAX / 10 before multiplication. For systems unable to patch immediately, restrict device file permissions via udev rules or SELinux/AppArmor policies to prevent unprivileged user access to /dev/i2c-* nodes. Monitor system logs for schedule_timeout warnings, which may indicate exploitation attempts or vulnerable configurations.

Patch guidance

Retrieve the latest kernel security advisory for your distribution. Patches will implement explicit validation of the timeout argument prior to the multiplication step. Verify that the fix enforces `arg ≤ INT_MAX / 10` or equivalent arithmetic safeguard. Test patched kernels in a staging environment, especially if I2C/SMBus hardware is integral to your system. Kernel updates may be combined with other fixes, so review release notes for any concurrent behavioral changes to i2c-dev.

Detection guidance

Monitor kernel logs (dmesg, journalctl) for recurring 'schedule_timeout: wrong timeout value' warnings, particularly correlating with i2c-dev ioctl calls. Use auditd rules to log I2C_TIMEOUT ioctl invocations from unexpected processes. On systems with SELinux or AppArmor, enable denial logging for i2c-dev access. Note that successful exploitation may not always produce visible warnings if the system continues operation; correlation with I2C device functionality degradation (e.g., sensor timeouts, hardware unresponsiveness) may be necessary.

Why prioritize this

This is a local denial-of-service vulnerability affecting core hardware communication infrastructure. While CVSS 5.5 (Medium) reflects the local-access requirement, the practical impact in production environments can be severe: loss of I2C-dependent services, hardware malfunction, or forced reboots. Prioritize patching for systems where I2C is mission-critical or where local access controls are weak. Organizations managing IoT fleets, embedded appliances, or industrial controllers should treat this as higher priority despite the CVSS rating.

Risk score, explained

The CVSS 3.1 score of 5.5 (Medium) appropriately reflects a low attack vector (local only), low complexity, and a low privilege requirement balanced against high availability impact. The vector CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H indicates no confidentiality or integrity compromise, only denial of service. The score does not elevate to High because exploitation requires prior local access; however, in environments where local access is abundant or insufficiently controlled, effective risk may be higher. Consider context: privilege requirement (PR:L) may be lower than expected if unprivileged users can access device files by default.

Frequently asked questions

Can this vulnerability be exploited remotely?

No. The vulnerability requires local access to invoke the ioctl on an i2c-dev character device. Remote exploitation is not possible without prior code execution on the target system.

What systems should prioritize patching?

IoT gateways, industrial controllers, embedded Linux systems, and multi-tenant machines where I2C is used for sensor communication or hardware control. Single-user workstations with restrictive device file permissions face lower risk.

Is there a workaround if I cannot patch immediately?

Restrict permissions on /dev/i2c-* devices via udev rules or file system ACLs to prevent unprivileged user access. Use MAC (SELinux/AppArmor) policies to further limit ioctl exposure. However, patching remains the definitive fix.

What is the functional impact if I apply the patch?

The patch only tightens validation; it prevents invalid timeout values from being accepted. Applications submitting legitimate timeouts will see no change in behavior. Only maliciously crafted or erroneous timeout values will be rejected.

This analysis is provided for informational and defensive security purposes. The information herein reflects the CVE description and vendor advisories as of the publication date. Patch availability, affected version ranges, and mitigation strategies vary by distribution and kernel branch; consult your Linux distributor's security advisory for precise guidance. Do not attempt unauthorized access to systems; exploit development or testing must occur only in controlled lab environments with explicit authorization. SEC.co makes no warranty regarding completeness or accuracy beyond the scope of public CVE data. Source: NVD (public-domain), retrieved 2026-07-30. Analysis generated by SEC.co (claude-haiku-4-5).