CVE-2026-98342 in Linux信息

摘要

由 VulDB • 2026-10-06

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

dmaengine: 释放 dma_device 前等待 RCU 读者完成

`dma_issue_pending_all()` 函数在 `rcu_read_lock()` 保护下使用 `list_for_each_entry_rcu()` 遍历 `dma_device_list`。而 `dma_device_release()` 通过 `list_del_rcu()` 解除设备的链接,随后调用 `device->device_release()`(在许多驱动程序中,如 plx_dma.c,该函数会直接调用 kfree())。

由于在解除设备链接和释放内存之间没有宽限期(grace period),`dma_issue_pending_all()` 中的并发 RCU 读者可能会在设备被释放后仍访问该设备。

最初的无锁遍历依赖于客户端持有 dmaengine 引用以锁定提供程序模块,从而确保只要它们可能遍历列表,设备和模块就会保持有效状态。提交 `8ad342a86359`(“dmaengine: 向 dma_device 结构体添加引用计数”)将 dma_device 的生命周期与模块引用解耦,因此现在可以在读者仍在遍历列表时释放设备。

在释放设备之前添加 `synchronize_rcu()`,以确保 RCU 读者已完成操作。保持该调用无条件执行:对于未实现 `device_release()` 的提供程序,一旦 `dma_async_device_unregister()` 返回,它们会自行释放设备。此调用将持有 `dma_list_mutex` 等待一个宽限期,这是安全的,且仅延迟了清理路径的执行。

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

来源

Do you want to use VulDB in your project?

Use the official API to access entries easily!