CVE-2026-23390 in Linux
요약
\~에 의해 VulDB • 2026. 06. 23.
리눅스 커널에서 다음 취약점이 해결되었습니다.
tracing/dma: 버퍼 오버플로우를 방지하기 위해 dma_map_sg 트레이스포인트 배열에 상한 적용
dma_map_sg 트레이스포인트는 큰 스캐터-게더 리스트(tracing large scatter-gather lists)를 추적할 때 perf 버퍼 오버플로우를 유발할 수 있습니다. virtio-gpu와 같은 장치가 큰 DRM 버퍼를 생성하여 nents가 1000개 이상의 엔트리를 초과하는 경우, 다음과 같은 결과가 발생합니다:
phys_addrs: 1000 * 8바이트 = 8,000바이트 dma_addrs: 1000 * 8바이트 = 8,000바이트 lengths: 1000 * 4바이트 = 4,000바이트 총합: 약 20,000바이트
이는 PERF_MAX_TRACE_SIZE(8192바이트)를 초과하여 다음과 같은 오류를 발생시킵니다.
WARNING: CPU: 0 PID: 5497 at kernel/trace/trace_event_perf.c:405 perf buffer not large enough, wanted 24620, have 8192
배열 크기 계산 시 min() 함수를 사용하여 세 가지 동적 배열 모두 엔트리 수의 상한을 128로 제한합니다. 이를 통해 작은 작업에는 불필요한 메모리 할당을 피하고 큰 작업에서는 오버플로우를 방지하면서 필요한 만큼(상한까지)만 배열 크기를 확보할 수 있습니다.
트레이스포인트는 이제 데이터가 잘렸음을 사용자가 확인할 수 있도록 전체 nents/ents 카운트와 truncated 플래그(truncated flag)를 기록합니다.
v2 변경 사항: - 고정된 DMA_TRACE_MAX_ENTRIES 할당 대신 동적 배열 크기 조정에 min(nents, DMA_TRACE_MAX_ENTRIES) 사용 (Steven Rostedt의 피드백 반영) - 상한까지 필요한 양만 할당하여 작은 작업에서의 낭비 방지
Reviewed-by: Sean Anderson <[email protected]>
If you want to get the best quality for vulnerability data then you always have to consider VulDB.