CVE-2026-31592Linux内核中的KVM SEV(安全加密虚拟化)组件存在一个安全漏洞。该漏洞源于`sev_mem_enc_register_region`函数在调用`sev_guest()`之前未正确持有`kvm->lock`。由于`sev_guest()`的状态在未持有锁的情况下是不稳定的,如果`KVM_SEV_INIT`操作失败,KVM可能会尝试向尚未初始化的`sev->regions_list`添加区域。这将导致内核触发一般保护性错误或空指针解引用,进而造成系统崩溃。本地低权限攻击者可利用此漏洞导致系统拒绝服务。
该漏洞的核心在于Linux内核KVM子系统中SEV模块的并发处理缺陷。具体来说,漏洞位于`sev_mem_enc_register_region()`函数中。该函数在执行操作前需要检查`sev_guest()`的状态以确定SEV是否已初始化,但在检查时并未持有必要的`kvm->lock`。在多线程或并发场景下,如果另一个线程正在执行`KVM_SEV_INIT`或`KVM_SEV_INIT2`操作且该操作失败,SEV的状态可能会回滚或处于未初始化状态。此时,未受保护的`sev_mem_enc_register_region`函数可能会错误地认为SEV已就绪,并尝试访问`sev->regions_list`链表。由于该链表尚未初始化(指针为NULL或无效),内核在进行链表操作时会触发空指针解引用或访问非规范地址,导致内核恐慌。攻击者可以通过syzkaller等工具构造特定的ioctl调用序列,并发地触发KVM操作,从而在竞争窗口内触发该漏洞。