CVE-2026-23390Linux内核中的tracing/dma组件存在一个缓冲区溢出漏洞。该漏洞源于`dma_map_sg`跟踪点在处理大型分散-聚集列表时,可能触发Perf缓冲区溢出。当设备(如virtio-gpu)创建大型DRM缓冲区,导致nents条目超过1000个时,所需内存将超过Perf最大跟踪大小限制(8192字节),从而导致内核警告和潜在的内存安全问题。
该漏洞发生在Linux内核的跟踪子系统,具体涉及DMA映射的跟踪点。当系统使用`perf`工具追踪`dma_map_sg`事件时,该跟踪点会动态分配数组来存储物理地址、DMA地址和长度信息。对于拥有大量分散-聚集列表(nents > 1000)的设备,例如使用virtio-gpu的场景,这些动态数组的大小计算如下:1000 * (8+8+4)字节 ≈ 20KB。这远超`PERF_MAX_TRACE_SIZE`(8192字节)。攻击者或本地低权限用户可利用此漏洞,通过触发特定DMA操作并开启追踪,导致内核写入越界。补丁通过引入`min(nents, DMA_TRACE_MAX_ENTRIES)`逻辑,将数组条目上限强制限制为128,确保分配的内存量始终在安全范围内。