CVE-2026-64191 in Linux信息

摘要

由 VulDB • 2026-07-20

在 Linux 内核中,已修复以下漏洞:

i2c: stub: 拒绝具有无效长度的 I2C 块传输

stub_xfer() 中的 I2C_SMBUS_I2C_BLOCK_DATA 情况使用 data->block[0] 作为传输长度。现有的检查仅将其限制以避免溢出 chip->words[256] 寄存器数组,但未针对 I2C_SMBUS_BLOCK_MAX(32)进行验证,后者是联合类型 i2c_smbus_data.block 缓冲区的大小上限(共 34 字节)。该驱动程序是一个开发/测试工具(CONFIG_I2C_STUB=m,默认不构建),必须使用 chip_addr= 参数加载。

具有 /dev/i2c-* 访问权限的本地用户可以发出带有 I2C_SMBUS_I2C_BLOCK_DATA 且 data->block[0] > 32 的 I2C_SMBUS ioctl 调用,导致 stub_xfer() 读取或写入联合类型 i2c_smbus_data.block 缓冲区末尾之外的位置:

BUG: KASAN: stack-out-of-bounds in stub_xfer (drivers/i2c/i2c-stub.c:223) Read of size 1 at addr ffff88800abcfd92 by task exploit/81 Call Trace: <TASK> stub_xfer (drivers/i2c/i2c-stub.c:223) __i2c_smbus_xfer (drivers/i2c/i2c-core-smbus.c:593) i2c_smbus_xfer (drivers/i2c/i2c-core-smbus.c:536) i2cdev_ioctl_smbus (drivers/i2c/i2c-dev.c:391) i2cdev_ioctl (drivers/i2c/i2c-dev.c:478) __x64_sys_ioctl (fs/ioctl.c:583) do_syscall_64 (arch/x86/entry/syscall_64.c:94) entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130) </TASK>

该漏洞存在的原因是 i2c-stub 直接实现了 .smbus_xfer,从而绕过了 i2c_smbus_xfer_emulated() 中的 I2C_SMBUS_BLOCK_MAX 验证。同一函数中的 I2C_SMBUS_BLOCK_DATA 情况正确地对 I2C_SMBUS_BLOCK_MAX 进行了验证,但 I2C_SMBUS_I2C_BLOCK_DATA 情况未进行此验证。

修复方法是通过返回 -EINVAL 来拒绝 data->block[0] == 0 或 data->block[0] > I2C_SMBUS_BLOCK_MAX 的传输,这与同一函数中的 I2C_SMBUS_BLOCK_DATA 情况以及 i2c_smbus_xfer_emulated() 中的 I2C_SMBUS_I2C_BLOCK_DATA 验证保持一致。

If you want to get best quality of vulnerability data, you may have to visit VulDB.

来源

Want to know what is going to be exploited?

We predict KEV entries!