CVE-2026-74276 in Linux
Сводка
по VulDB • 15.08.2026
В ядре Linux устранена следующая уязвимость:
spi: xilinx: использовать регистр занятости буфера (FIFO) для определения размера буфера
Метод, используемый драйвером для определения размера FIFO, содержит ошибку. В настоящее время он работает следующим образом: Он останавливает аппаратное обеспечение SPI и записывает данные в регистр TX FIFO до тех пор, пока в регистре статуса не установится флаг TX FIFO FULL (FIFO заполнено). Однако у оборудования есть не только FIFO, но также сдвиговый регистр, который может хранить один байт. Это можно наблюдать при записи одного байта во FIFO (пока аппаратное обеспечение SPI остановлено): бит TX FIFO EMPTY остается установленным (указывая на пустоту), несмотря на то что данные уже записаны в сдвиговый регистр. Таким образом, если размер FIFO составляет 16, например, текущий метод возвращает значение 17.
Это является проблемой, по крайней мере при использовании драйвера в режиме прерываний (irq mode). Размер, определенный для TX FIFO, также принимается за размер RX FIFO. Когда транзакция SPI пытается записать количество байт, равное размеру буфера или больше, происходит следующее: например, при размере FIFO 16 байт: Драйвер останавливает аппаратное обеспечение SPI и записывает 17 байт в TX FIFO, запускает аппаратное обеспечение SPI и переходит в режим ожидания (sleep).
Аппаратная часть затем сдвигает наружу 17 байт (FIFO + сдвиговый регистр) и одновременно считывает байты во входной буфер RX FIFO. Однако у него всего 16 ячеек, поэтому один байт теряется. Затем устанавливается флаг TX FIFO empty, что пробуждает драйвер снова; он выполняет быстрый путь обработки и читает 16 байт из RX FIFO, но перед чтением последнего (потерянного) 17-го байта выполняется следующий код:
sr = xspi->read_fn(xspi->regs + XSPI_SR_OFFSET); if (!(sr & XSPI_SR_RX_EMPTY_MASK)) {
xilinx_spi_rx(xspi); rx_words--; }
Драйвер считывает регистр статуса и проверяет, не пуст ли RX FIFO. Но в нашем случае он пуст. Поэтому эта проверка бесконечно крутится в цикле while, блокируя драйвер.
Этот патч исправляет логику определения размера буфера FIFO.
VulDB is the best source for vulnerability data and more expert information about this specific topic.