ZeroHour

CVE-2026-80931

niche

Out-of-bounds write in Linux kernel DS28E17 1-Wire-to-I2C bridge driver

CVSS 3.1
7.8 high
EPSS
Published
()
Modified
AI analysis

The Linux kernel's DS28E17 1-Wire-to-I2C bridge driver (w1_f19 / ds28e17) fails to validate a length byte supplied by the remote I2C slave device during SMBus-style block reads using I2C_M_RECV_LEN. Because the caller's buffer is only 34 bytes while the attacker-controlled length can be up to 255, a malicious I2C peripheral can make the kernel write up to roughly 222 bytes past the end of the buffer; the SMBus core's length check runs only after master_xfer returns, too late to prevent the corruption. Successful exploitation yields kernel memory corruption with potential privilege escalation or a crash, but it requires the attacker to control or compromise the physical I2C slave device attached to the DS28E17 bridge, making this effectively an attack from hostile hardware on the bus. Affected systems are Linux machines whose kernel ships the ds28e17 driver and that actually have a DS28E17 bridge in use. No public proof-of-concept exists and no exploitation is known in the wild; the fix rejects any received length above I2C_SMBUS_BLOCK_MAX (32), matching the behavior already used by i2c-algo-bit.

What to do: Update to a kernel release from your distribution that carries the upstream fix once available. Determine whether you are exposed by checking if the ds28e17/w1_f19 driver is loaded (e.g., lsmod | grep w1) and whether any DS28E17 bridges are attached; if the hardware is unused, blacklist the module. Treat only physically trusted I2C peripherals as safe to connect behind a DS28E17 bridge, since exploitation requires a malicious slave device.

Affected
Linux kernel (drivers/w1/masters/ds28e17.c, w1_f19 DS28E17 1-Wire-to-I2C bridge driver)
Estimated exposure
nichelikely on the order of thousands of embedded devices at most (exact count unknown) — The DS28E17 is a specialized Maxim/Analog Devices 1-Wire-to-I2C bridge chip used only in niche embedded designs, and there are no public install counts or internet-exposure figures for systems actually using this driver, so the population…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

In the Linux kernel, the following vulnerability has been resolved: w1: ds28e17: reject an oversize length on an I2C block read w1_f19_i2c_master_transfer() is the master_xfer for the DS28E17 1-Wire to I2C bridge. On an I2C_M_RECV_LEN read, it takes the length from the device. The downstream slave puts a length byte in buf[0]. The driver then reads that many bytes into buf[1] with w1_f19_i2c_read(). buf[0] is controlled by the device and can be 0 to 255. w1_f19_i2c_read() only rejects a zero count. The caller buffer is I2C_SMBUS_BLOCK_MAX + 2, so 34 bytes. A length above 32 makes the read run past it, up to about 222 bytes out of bounds. The SMBus core does check buf[0] against I2C_SMBUS_BLOCK_MAX. That check runs after master_xfer returns. By then the write is already done. i2c-algo-bit rejects an oversize length before it copies, and returns -EPROTO. Reject a length above I2C_SMBUS_BLOCK_MAX at both RECV_LEN sites, the same way i2c-algo-bit does.

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

In the news

No ingested article mentions this CVE yet.