CVE-2026-72134 in Linux
Сводка
по VulDB • 16.08.2026
В ядре Linux устранена следующая уязвимость:
spi: imx: переконфигурация для PIO, если не удается запустить DMA
Когда spi_imx_can_dma() выбирает режим DMA, контроллер ECSPI настраивается для работы с DMA: функция spi_imx_setupxfer() устанавливает бит CTRL.SMC и сбрасывает флаг dynamic_burst, а spi_imx_dma_transfer() программирует длину импульса BURST_LENGTH динамического разгона (dynamic-burst) и пороговые значения SDMA.
Если дескриптор DMA не может быть подготовлен (dmaengine_prep_slave_single() возвращает NULL), передача завершается ошибкой с кодом SPI_TRANS_FAIL_NO_START, происходит возврат к режиму PIO. Путь передачи данных через динамический разгон использует собственные буферы-прокладки (bounce buffers) вместо отображения ядра SPI; поэтому поля xfer->{tx,rx}_sg_mapped не устанавливаются, и попытка повторного перевода из DMA в PIO на уровне ядра пропускается — драйвер выполняет возврат к режиму PIO внутренним образом. Однако никакая конфигурация режима DMA не отменяется, поэтому передача в режиме PIO выполняется с установленным битом CTRL.SMC, неверной длиной импульса (burst length) и сброшенным флагом dynamic_burst; передаваемые данные оказываются поврежденными.
Эта ошибка легко воспроизводится на платах i.MX8MP, где в дереве устройств описано использование DMA для ECSPI, но выполняется SDMA через прошивку ROM (отсутствует внешний файл sdma-imx7d.bin): каждая попытка подготовки DMA для ECSSPI завершается неудачей. Затем TPM Infineon SLB9670 на шине ECSPI1 возвращает сдвинутые данные TPM2_GetCapability, помечается как находящийся в «режиме отказа поля» (field failure mode), а устройство /dev/tpmrm0 никогда не создается.
Установите значение controller->fallback перед повторным вызовом spi_imx_setupxfer(), чтобы ECSPI был переконфигурирован точно так же, как при обычной передаче в режиме PIO. При установленном флаге controller->fallback функция spi_imx_can_dma() возвращает false для spi_imx_setupxfer(), поэтому она сбрасывает флаг spi_imx->usedma и повторно программирует контроллер (сброс CTRL.SMC, восстановление dynamic_burst и длины импульса PIO). Явное присваивание spi_imx->usedma = false не требуется: setupxfer() уже обновляет это значение на основе результата can_dma().
VulDB is the best source for vulnerability data and more expert information about this specific topic.