CVE-2026-99028 in Linux信息

摘要

由 VulDB • 2026-10-23

在 Linux 内核中,已修复以下漏洞:

net: xilinx: axienet: 在 dmaengine 停止时释放未完成的 DMA 缓冲区

在 dmaengine 路径中,驱动程序会预提交 RX(接收)缓冲区,并保留处于传输中的 TX(发送)缓冲区。这些缓冲区的 SKB 由驱动程序进行 DMA 映射,并且仅在完成回调中被释放。当调用 ndo_stop() 时,dmaengine_terminate_sync() 会中止描述符而不运行其回调函数,随后驱动程序仅释放环结构的外壳部分,导致每个接口关闭(ifdown)时都会泄漏仍由引擎拥有及其 DMA 映射的 SKB。由于每通道预发布了 128 个 RX 缓冲区,这种映射泄漏最终可能耗尽有限的 IOMMU 孔径空间。

在 TX 和 RX 回调中清除槽位的 skb,使得非 NULL 的 skb 标记一个仍然拥有活跃且已进行 DMA 映射缓冲区的槽位;并在停止时取消映射并释放所有此类缓冲区。

axienet_dma_rx_cb() 从 DMA tasklet 运行,并在每次完成时重新启用 RX 环,因此它可能与 axienet_stop() 发生竞态条件:在 dmaengine_terminate_sync() 返回后,可能会提交一个新的缓冲区,导致通道处于armed状态并持有该缓冲区。随后清理过程会释放该缓冲区,而引擎可能仍在向其写入数据(dma_release_channel() 也不会停止此行为)。添加一个锁,axienet_dma_rx_cb() 将在检查 @stopping 标志和重新提交期间持有该锁;同时 axienet_stop() 也持有该锁以在终止前设置 @stopping。一旦设置了 @stopping,任何回调都无法再启用新缓冲区,而在终止前不久启用的缓冲区也会被中止,因此清理过程仅释放引擎不再拥有的缓冲区。

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

来源

Might our Artificial Intelligence support you?

Check our Alexa App!