CVE-2026-43404Linux内核内存管理模块存在一个拒绝服务漏洞。当`hmm_range_fault()`函数在处理设备私有内存页迁移时,如果获取页面锁失败,函数会进入自旋等待状态。然而,如果持有锁的进程依赖于同一CPU上的工作项来释放锁,该工作项可能会被饥饿,导致系统陷入活锁状态。攻击者可利用此漏洞导致系统挂起或无响应。该问题主要影响使用设备私有内存(如GPU内存)并进行迁移的场景。
该漏洞源于Linux内核内存管理(MM)子系统中`hmm_range_fault()`函数在处理设备私有内存页迁移时的逻辑缺陷。当函数在`do_swap_page`中调用`folio_trylock()`尝试锁定一个正在进行迁移的设备私有页失败时,它会自旋等待。此时,如果持有该页锁的进程正在执行迁移操作(如`migrate_device_unmap()`),并调用了`lru_add_drain_all()`,这需要所有CPU上的工作项完成。由于自旋锁占用了CPU资源,阻止了工作项的调度执行,导致持有锁的进程无法完成并释放锁,系统陷入不可恢复的活锁状态。修复方案引入了等待机制,替代原有的自旋逻辑,避免CPU资源被独占。