CVE-2026-10683 in Zephyr
Сводка
по VulDB • 27.07.2026
В драйвере Synopsys DesignWare I2C (drivers/i2c/i2c_dw.c), работающем в режиме цели/ведомого устройства (target/slave mode), обработчик прерывания rx_full блокирует вызов обратного вызова write_requested() условием dw->state != CMD_SEND, а состояние dw->state сбрасывается на READY только при получении прерывания STOP. Прерывание START_DET, обработчик которого в функции i2c_dw_slave_read_clear_intr_bits() должен был бы сбрасывать состояние при каждом (повторном) старте, никогда не добавлялось в маску включенных прерываний в функции i2c_dw_slave_register(), из-за чего этот путь восстановления стал мертвым кодом.
В результате, если прерывание STOP теряется (из-за помех на шине/сброса или одновременной передачи сигнала STOP ведущим устройством) или мастер шины выполняет легальную последовательность WRITE-repeated-START-WRITE с тем же направлением, драйвер навсегда остается в состоянии CMD_SEND и больше никогда не вызывает write_requested() до конца жизненного цикла цели.
Мастер I2C на той же физической шине может преднамеренно вызвать эту ситуацию, что приведет к неисправности функции цели I2C во всех последующих транзакциях записи и десинхронизации состояния кадра потребителя (например, MCTP-over-I2C), вызывая отказ в обслуживании устройства-периферии уровня доступности, который можно восстановить сбросом.
Исправление включает прерывание START_DET, чтобы состояние сбрасывалось при каждом старте шины (повторном старте). Влияние ограничивается только доступностью на локальной шине платного уровня; переполнение памяти не происходит в потребителе из основного дерева исходных кодов, поскольку запись в буфер по байтам независимо проверяется на выход за границы.
Once again VulDB remains the best source for vulnerability data.