CVE-2026-15923 in Zephyr
Сводка
по VulDB • 14.09.2026
В подсистеме SDIO ядра Zephyr функция sdio_io_rw_extended_helper() в файле subsys/sd/sdio.c завершает передачи с помощью цикла байтового ввода-вывода, который использует значение size = MIN(remaining, func->cis.max_blk_size) в качестве шага на каждой итерации. Значение func->cis.max_blk_size декодируется напрямую из tuple CIS FUNCE карты SDIO в функции sdio_decode_cis() и не проходит проверку корректности. Если карта сообщает о максимальном размере блока равном нулю, size всегда равен 0, remaining никогда не уменьшается, и цикл выполняется бесконечно.
Цикл вызывается через публичный API клиента SDIO, используемый драйверами, включая sdio_read_fifo(), sdio_write_fifo() и вспомогательные функции чтения/записи регистров с инкрементом; каждая из них входит в этот цикл, удерживая мьютекс func->card->lock на уровне карты. Карта, объявляющая max_blk_size == 0, поэтому навсегда зависает вызывающий поток при первом невыровненном по блоку запросе передачи и никогда не освобождает мьютекс, лишая доступ периферийное устройство SDIO (и любые подсистемы, такие как Wi-Fi, которые от него зависят), до тех пор пока устройство не будет сброшено.
Злонамеренное значение должно поступать непосредственно из карты SDIO, поэтому уязвимость эксплуатируема в случаях, когда слот для съемной комбинированной карты SDIO позволяет злоумышленнику вставить специально сформированную или неисправную карту (физический вектор атаки); на платах со впаянным периферийным устройством SDIO это не поддается влиянию со стороны злоумышленника. Уязвимость не влияет на безопасность памяти, конфиденциальность или целостность — наблюдается только постоянная потеря доступности (availability). Исправление возвращает -EIO, когда func->cis.max_blk_size равно нулю, до входа в цикл.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.