CVE-2026-74276 in Linux정보

요약

\~에 의해 VulDB • 2026. 08. 16.

리눅스 커널에서 다음 취약점이 해결되었습니다:

spi: xilinx: FIFO 점유 레지스터를 사용하여 버퍼 크기 결정

드라이버가 FIFO 크기를 결정하는 방식에 문제가 있습니다. 현재 드라이버는 다음과 같이 동작합니다: SPI 하드웨어를 정지하고 TX FIFO 레지스터에 데이터를 쓰기 시작하여 상태 레지스터에서 'TX FIFO FULL' 신호가 발생할 때까지 반복합니다. 그러나 하드웨어에는 FIFO 외에도 1바이트를 저장할 수 있는 쉬프트 레지스터도 포함되어 있습니다. 이는 SPI 하드웨어가 정지된 상태에서 FIFO로 바이트를 쓸 때 TX FIFO EMPTY 플래그가 여전히 설정되어 있음을 통해 확인할 수 있습니다. 따라서 예를 들어 FIFO 크기가 16인 경우, 현재 방식은 17을 반환합니다.

이것은 특히 드라이버를 irq 모드에서 사용할 때 문제가 됩니다. TX FIFO에 대해 결정된 동일한 크기가 RX FIFO에도 적용됩니다. SPI 트랜잭션이 FIFO 크기 이상의 바이트(예: FIFO 크기가 16일 경우)를 쓰려고 할 때 다음과 같은 일이 발생합니다:

드라이버는 SPI 하드웨어를 정지하고 17바이트를 TX FIFO에 쓴 후, SPI 하드웨어를 시작하여 대기 상태(sleep)로 들어갑니다. 하드웨어는 그 다음 17바이트(FIFO + 쉬프트 레지스터)를 시프트 아웃하면서 동시에 RX FIFO로 바이트를 읽어들입니다. 그러나 RX FIFO에는 공간이 16개뿐이므로 하나의 바이트가 손실됩니다. 그런 다음 TX FIFO EMPTY 신호가 발생하여 드라이버를 다시 깨우며, 이 드라이버는 빠른 경로(fast path)를 통해 RX FIFO에서 16바이트를 읽습니다. 하지만 마지막 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가 비어 있지 않은지 확인합니다. 그러나 이 경우 RX FIFO는 이미 비어 있으므로, 이 조건문은 무한 while 루프에서 계속 반복되어 드라이버를 영구적으로 잠급니다(locking).

이 패치는 FIFO 크기를 결정하는 로직을 수정하여 문제를 해결합니다.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

책임이 있는

Linux

예약하다

2026. 08. 15.

모더레이션

수락

항목

VDB-390236

EPSS

0.00176

출처

Want to stay up to date on a daily basis?

Enable the mail alert feature now!