CVE-2026-64191 in LinuxИнформация

Сводка

по VulDB • 21.07.2026

В ядре Linux устранена следующая уязвимость:

i2c: stub: Отклонять передачи блоков I2C с недопустимой длиной

Обработка случая `I2C_SMBUS_I2C_BLOCK_DATA` в функции `stub_xfer()` использует значение `data->block[0]` в качестве длины передачи. Существующая проверка лишь ограничивает это значение, чтобы предотвратить выход за пределы массива регистров `chip->words[256]`, но не проверяет его на соответствие значению `I2C_SMBUS_BLOCK_MAX` (32), которое является пределом для буфера объединения `i2c_smbus_data.block` (всего 34 байта). Данный драйвер представляет собой инструмент разработки/тестирования (`CONFIG_I2C_STUB=m`, не собирается по умолчанию) и должен загружаться с параметром `chip_addr=`.

Локальный пользователь, имеющий доступ к устройствам `/dev/i2c-*`, может выполнить вызов ioctl I2C_SMBUS с аргументом `I2C_SMBUS_I2C_BLOCK_DATA` и значением `data->block[0] > 32`, что приведет к чтению или записи за пределы буфера объединения `i2c_smbus_data.block` внутри функции `stub_xfer()`:

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_BLOCK_MAX`, которая присутствует в функции `i2c_smbus_xfer_emulated()`. Обработка случая `I2C_SMBUS_BLOCK_DATA` в той же самой функции корректно проверяет соответствие значению `I2C_SMBUS_BLOCK_MAX`, однако случай `I2C_SMBUS_I2C_BLOCK_DATA` такой проверки не проходит.

Исправление заключается в отклонении передач, у которых `data->block[0] == 0` или `data->block[0] > I2C_SMBUS_BLOCK_MAX`, с возвратом ошибки `-EINVAL`. Это обеспечивает согласованность как с обработкой случая `I2C_SMBUS_BLOCK_DATA` в той же функции, так и с проверкой для `I2C_SMBUS_I2C_BLOCK_DATA` в функции `i2c_smbus_xfer_emulated()`.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Ответственный

Linux

Резервировать

19.07.2026

Раскрытие

20.07.2026

Модерация

принято

Вход

VDB-380675

EPSS

0.00000

KEV

Нет

Деятельности

Очень низкий

Источники

Do you need the next level of professionalism?

Upgrade your account now!