Ad

CVE-2026-72142

NONE EPSS 0.21%
Обновлено 23 августа 2026
Linux
Параметр Значение
Поставщик Linux
Публичный эксплойт Нет

В ядре Linux устранена следующая уязвимость: i2c: imx: исправить заблокированную шину на блочном чтении SMBus 0 (атомарном) SMBus 3.1 6.5.7 допускает количество байтов блочного чтения, равное 0, но атомарное (опрос) отклоняет его как -EPROTO. Хуже того, он возвращается без NACK+STOP: следующий цикл приема уже начался, поэтому цель продолжает удерживать SDA, и шина остается зависшей до тех пор, пока не произойдет выключение и включение питания в течение это контроллер i2c. Чтение I2DR для получения счетчика аналогичным образом активирует следующий байт в count > путь I2C_SMBUS_BLOCK_MAX, который также напрямую возвращает -EPROTO и вышел из автобуса.

Обработайте оба варианта: NACK для фиктивного байта в полете (TXAK) и расширите msgs->len, чтобы существующая обработка последнего байта выдает STOP; фиктивный байт отбрасывается. Счетчик 0 означает допустимое чтение пустого блока; на счет выше I2C_SMBUS_BLOCK_MAX по-прежнему сообщается как -EPROTO, но только после того, как шина был выпущен. Путь, управляемый прерываниями, имеет тот же недостаток, что и более поздний коммит, и исправляется отдельно, так как содержит разные исправления: тег и стабильный диапазон.

Показать оригинальное описание (EN)

In the Linux kernel, the following vulnerability has been resolved: i2c: imx: fix locked bus on SMBus block-read of 0 (atomic) SMBus 3.1 6.5.7 allows a Block Read byte count of 0, but the atomic (polling) path rejects it as -EPROTO. Worse, it returns without a NACK+STOP: the next receive cycle has already started, so the target keeps holding SDA and the bus stays stuck until a power cycle for this i2c controller. Reading I2DR to obtain the count likewise arms the next byte on the count > I2C_SMBUS_BLOCK_MAX path, which also returned -EPROTO directly and left the bus held. Handle both: NACK the in-flight dummy byte (TXAK) and extend msgs->len so the existing last-byte handling emits STOP; the dummy byte is discarded. A count of 0 is a valid empty block read; a count above I2C_SMBUS_BLOCK_MAX is still reported as -EPROTO, but only after the bus has been released. The interrupt-driven path has the same flaw from a later commit and is fixed separately, as it carries a different Fixes: tag and stable range.