🇰🇷 한글 설명
Linux 커널의 dma-buf/udmabuf 구성 요소에서 CONFIG_DMA_API_DEBUG_SG가 활성화된 경우, 중복된 CPU 동기화로 인해 잘못된 캐시라인 EEXIST 경고가 발생하는 취약점입니다. udmabuf가 동일한 페이지를 매핑할 때 DMA 디버그 인프라가 이를 중복 매핑으로 오인하여 경고를 발생시키는 문제입니다. 이를 해결하기 위해 DMA_ATTR_SKIP_CPU_SYNC 플래그를 사용하여 불필요한 동기화를 건너뛰도록 수정되었습니다.
💡 쉬운 설명
컴퓨터의 메모리를 관리하는 과정에서 시스템이 실수로 '데이터가 겹쳐 있다'는 잘못된 경고를 내보내는 버그입니다. 실제 보안 위협이라기보다는 시스템 로그에 불필요한 오류 메시지가 남는 현상을 해결한 것입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
dma-buf/udmabuf: skip redundant cpu sync to fix cacheline EEXIST warning
When CONFIG_DMA_API_DEBUG_SG is enabled, importing a udmabuf into a DRM
driver (e.g. amdgpu for video playback in GNOME Videos / Showtime)
triggers a spurious warning:
DMA-API: amdgpu 0000:03:00.0: cacheline tracking EEXIST, \
overlapping mappings aren't supported
WARNING: kernel/dma/debug.c:619 at add_dma_entry+0x473/0x5f0
The call chain is:
amdgpu_cs_ioctl
-> amdgpu_ttm_backend_bind
-> dma_buf_map_attachment
-> [udmabuf] map_udmabuf -> get_sg_table
-> dma_map_sgtable(dev, sg, direction, 0) // attrs=0
-> debug_dma_map_sg -> add_dma_entry -> EEXIST
This happens because udmabuf builds a per-page scatter-gather list via
sg_set_folio(). When begin_cpu_udmabuf() has already created an sg
table mapped for the misc device, and an importer such as amdgpu maps
the same pages for its own device via map_udmabuf(), the DMA debug
infrastructure sees two active mappings whose physical addresses share
cacheline boundaries and warns about the overlap.
The DMA_ATTR_SKIP_CPU_SYNC flag suppresses this check in
add_dma_entry() because it signals that no CPU cache maintenance is
performed at map/unmap time, making the cacheline overlap harmless.
All other major dma-buf exporters already pass this flag:
- drm_gem_map_dma_buf() passes DMA_ATTR_SKIP_CPU_SYNC
- amdgpu_dma_buf_map() passes DMA_ATTR_SKIP_CPU_SYNC
The CPU sync at map/unmap time is also redundant for udmabuf:
begin_cpu_udmabuf() and end_cpu_udmabuf() already perform explicit
cache synchronization via dma_sync_sgtable_for_cpu/device() when CPU
access is requested through the dma-buf interface.
Pass DMA_ATTR_SKIP_CPU_SYNC to dma_map_sgtable() and
dma_unmap_sgtable() in udmabuf to suppress the spurious warning and
skip the redundant sync.
📍 영향받는 시스템
Linux kernel (CONFIG_DMA_API_DEBUG_SG가 활성화된 환경)
⚔️ 공격 벡터
직접적인 공격 벡터 없음 (시스템 로그에 잘못된 경고를 발생시키는 로직 결함)
🛡️ 대응 방법
Linux 커널을 최신 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 패치가 포함된 최신 릴리스 버전인지 확인하십시오.