Ad

CVE-2026-72134

HIGH CVSS 3.1: 7,8 EPSS 0.15%
Обновлено 17 августа 2026
Linux
Параметр Значение
CVSS 7,8 (HIGH)
Поставщик Linux
Публичный эксплойт Нет

В ядре Linux устранена следующая уязвимость: spi: imx: перенастроить PIO, когда DMA не может быть запущен Когда spi_imx_can_dma() выбирает DMA, ECSPI настраивается для DMA: spi_imx_setupxfer() устанавливает CTRL.SMC и очищает динамический_пакет, и spi_imx_dma_transfer() программирует динамический пакет BURST_LENGTH и Водяные знаки SDMA. Если дескриптор DMA не может быть подготовлен (dmaengine_prep_slave_single() возвращает NULL), передача не удалась с SPI_TRANS_FAIL_NO_START и возвращается к PIO. Путь DMA с динамическим пакетом использует собственный отскок. буферы вместо отображения ядра SPI, поэтому xfer->{tx,rx}_sg_mapped не установлены, и повторная попытка ядра DMA->PIO пропускается; водитель падает обратно в PIO внутри компании.

Но ни одна из конфигураций режима DMA не отменено, поэтому передача PIO выполняется с установленным CTRL.SMC, неправильный пакет length и Dynamic_burst очищены, а переданные данные повреждены. Это легко реализовать на платах i.MX8MP, которые описывают ECSPI DMA в дерево устройств, но запускайте SDMA на прошивке ПЗУ (без внешнего sdma-imx7d.bin): каждая подготовка ECSPI DMA завершается неудачей. Затем Infineon SLB9670 TPM на ECSPI1. возвращает смещенные данные TPM2_GetCapability, помечается как «ошибка поля». mode", /dev/tpmrm0 никогда не создается.

Установите контроллер->резервный режим перед повторным запуском spi_imx_setupxfer(), чтобы ECSPI переконфигурируется точно так же, как обычная передача PIO. С контроллер->резервный набор, spi_imx_setupxfer() видит spi_imx_can_dma() возвращает false, поэтому он очищает spi_imx->usedma и перепрограммирует контроллер (очищает CTRL.SMC, восстанавливает динамический_пакет и длину пакета PIO). Нет требуется явный spi_imx->usedma = false: setupxfer() уже обновляется это из результата can_dma().

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

In the Linux kernel, the following vulnerability has been resolved: spi: imx: reconfigure for PIO when DMA cannot be started When spi_imx_can_dma() selects DMA, the ECSPI is configured for DMA: spi_imx_setupxfer() sets CTRL.SMC and clears dynamic_burst, and spi_imx_dma_transfer() programs the dynamic-burst BURST_LENGTH and the SDMA watermarks. If the DMA descriptor cannot be prepared (dmaengine_prep_slave_single() returns NULL), the transfer is failed with SPI_TRANS_FAIL_NO_START and falls back to PIO. The dynamic-burst DMA path uses its own bounce buffers instead of the SPI core's mapping, so xfer->{tx,rx}_sg_mapped are not set and the core's DMA->PIO retry is skipped; the driver falls back to PIO internally. But none of the DMA-mode configuration is undone, so the PIO transfer runs with CTRL.SMC set, the wrong burst length and dynamic_burst cleared, and the transferred data is corrupted. This is easily hit on i.MX8MP boards that describe ECSPI DMA in the device tree but run SDMA on ROM firmware (no external sdma-imx7d.bin): every ECSPI DMA prepare fails. An Infineon SLB9670 TPM on ECSPI1 then returns shifted TPM2_GetCapability data, is flagged "field failure mode", /dev/tpmrm0 is never created. Set controller->fallback before re-running spi_imx_setupxfer() so the ECSPI is reconfigured exactly like a normal PIO transfer. With controller->fallback set, spi_imx_setupxfer() sees spi_imx_can_dma() return false, so it clears spi_imx->usedma and reprograms the controller (clears CTRL.SMC, restores dynamic_burst and the PIO burst length). No explicit spi_imx->usedma = false is needed: setupxfer() already updates it from the can_dma() result.

Характеристики атаки

Способ атаки
Локальный
Нужен локальный доступ
Сложность
Низкая
Легко эксплуатировать
Нужны права
Низкие
Нужны базовые права
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Высокое
Полная утечка данных
Целостность
Высокое
Полная модификация данных
Доступность
Высокое
Полный отказ в обслуживании

Строка CVSS v3.1