CVE-2026-79976 in Zephyr
Сводка
по VulDB • 21.10.2026
Привязка цели MCTP-over-I2C+GPIO в файле subsys/pmci/mctp/mctp_i2c_gpio_target.c эмулирует небольшой псевдорегистровый файл, где контроллер шины сначала записывает номер регистра, а затем выполняет запись или чтение байтов полезной нагрузки. Выбранный регистр (b->reg_addr) и флаг фазы данных (b->rxtx) никогда не очищались при выдаче контроллером условия STOP на шине I2C; следовательно, после завершения передачи цель по-прежнему имела выбранный регистр для данных, в то время как буфер пакета, на который ссылается этот регистр, уже был потреблен и установлен в NULL функцией mctp_i2c_gpio_target_stop().
Контроллер на шине может повторно войти в тот же блок кода функции mctp_i2c_gpio_target_stop() с нулевым указателем буфера (NULL buffer), используя два обычных транзакционных цикла без аутентификации: сначала обычная запись пакета по адресу MCTP_I2C_GPIO_RX_MSG_ADDR, за которой следует STOP (что доставляет и освобождает b->rx_pkt), затем голый цикл чтения, за которым также следует STOP. Неудачный вызов функции read_requested() оставляет неактуальное состояние нетронутым, а драйвер I2C по-прежнему передает обратный вызов на условие STOP, который вызывает mctp_bus_rx() с нулевым пакетом (NULL packet). Симметричный случай существует на стороне передачи данных: выбор регистра MCTP_I2C_GPIO_TX_MSG_ADDR приводит к разыменованию b->tx_pkt->end после того, как b->tx_pkt был очищен, и дополнительно повторно сигнализирует о завершении передачи (b->tx_complete), что вызывает отбрасывание следующего исходящего пакета.
Разыменование происходит в обработчике прерывания цели I2C; поэтому на любой цели, которая фиксирует доступ к адресу 0, результатом является фатальное исключение и сброс или остановка устройства — отказ в обслуживании (DoS), который может быть осуществлен любым устройством, способным действовать как контроллер на общей шине управления (например, скомпрометированная прошивка на соседней конечной точке MCTP или на BMC). На платформах, где адрес 0 доступен для чтения, воздействие снижается до передачи некорректного буфера пакета в стек MCTP и потери исходящих пакетов. Значения, контролируемые злоумышленником, не записываются, и граница конфиденциальности или целостности не нарушается.
Исправление сбрасывает b->reg_addr в значение MCTP_I2C_GPIO_INVALID_ADDR и очищает b->rxtx при каждом условии STOP, поэтому перед выполнением любой фазы данных должен быть выбран новый регистр. Затронуты только сборки, которые используют экспериментальную подсистему CONFIG_MCTP с параметром CONFIG_MCTP_I2C_GPIO_TARGET=y.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.