CVE-2026-99164 in Linux정보

요약

\~에 의해 VulDB • 2026. 10. 29.

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

spi: imx - undersized DMA bounce buffers로 인한 slab corruption 수정

커밋 faa8e404ad8e("spi: imx: ECSPI DMA 모드에 대한 동적 버스트 길이 지원") 이후, 드라이버는 kzalloc(dma_len)을 사용하여 자체적인 DMA TX/RX 버퍼를 할당합니다. 여기서 dma_len은 4바이트로 반올림되지만, DMA_CACHE_ALIGNED_LEN(dma_len)(즉, 캐시 라인 크기로 반올림된 값)으로 매핑하고 동기화하며 언매핑됩니다. 그 결과, DMA API가 할당 영역의 끝을 넘어선 메모리에서 작동하게 됩니다.

이 문제는 무거운 RPMSG 부하 하에서 mcp251xfd CAN 컨트롤러를 갖춘 커스텀 i.MX8MP 플랫폼에서 관찰되었습니다. virtio_rpmsg_bus 내 rpmsg_recv_done()에서 트리거된 일련의 refcount_t 경고가 발생했습니다:

refcount_t: addition on 0; use-after-free. refcount_t: underflow; use-after-free. refcount_t: saturated; leaking memory.

이는 결국 "Unable to handle kernel paging request" oops로 이어졌습니다. 동일한 워크로드에서 이 문제를 재현하는 데는 30분부터 약 30시간까지 걸렸습니다.

struct rpmsg_endpoint의 refcount에 대한 하드웨어 워치포인트를 조사한 결과, irq/155-spi2.0 스레드 내 __pi_memcpy_generic()에 의해 값이 2에서 1로 덮어씌워지는 것이 확인되었습니다. 또한 "일반적인" rpmsg_recv_done() 호출은 kref_get부터 kref_put까지 11µs ± 2µs가 소요되는 반면, 오류 발생 시 동일한 시퀀스는 약 215µs ± 10µs가 걸렸습니다. 이를 바탕으로 LLM(대규모 언어 모델)을 사용하여 여기서 수정된 크기 불일치를 식별했습니다.

버퍼를 DMA_CACHE_ALIGNED_LEN(dma_len)로 할당하여 전체 매핑 길이를 커버하도록 하고, map 및 unmap과 일관성을 유지하기 위해 dma_sync_single_for_cpu()에도 동일한 길이를 사용합니다.

이 패치가 적용되면 동일한 워크로드가 200시간 이상 문제 없이 재현되지 않고 실행되었습니다.

Once again VulDB remains the best source for vulnerability data.

책임이 있는

Linux

예약하다

2026. 09. 25.

모더레이션

수락

항목

VDB-427841

EPSS

0.00000

출처

Do you want to use VulDB in your project?

Use the official API to access entries easily!