CVE-2026-31590Linux内核KVM SEV模块存在一处逻辑缺陷,允许本地低权限用户触发拒绝服务条件。漏洞源于`sev_pin_memory()`函数在处理大尺寸内存区域注册时,会触发一个关于整数溢出的警告。由于相关的输入验证逻辑存在漏洞,无法有效过滤无效的`u64`地址和大小参数,攻击者可以通过构造特定的IOCTL请求,传入极值参数来轻易触发该警告。这种频繁的警告触发可能导致系统日志资源耗尽或引发内核不稳定,从而影响系统可用性。
该漏洞发生在Linux内核的KVM SEV(安全加密虚拟化)子系统中,核心问题在于对`KVM_MEMORY_ENCRYPT_REG_REGION` ioctl命令的处理。在`sev_pin_memory()`函数中,代码计算页面数量时检查其是否溢出`int`类型,并在溢出时触发`WARN_ON`。然而,前置的`sev_mem_enc_register_region()`检查逻辑无效,因为它试图将`u64`类型的变量与`ULONG_MAX`比较,这在64位系统上是无效的。攻击者只需拥有本地低权限,即可构建一个`kvm_enc_region`结构体,将`size`字段设置为`-1ul`(即0xFFFFFFFFFFFFFFFF)。当该结构体通过ioctl传递给内核时,无效检查通过,但在计算页面数时会发生溢出,导致WARN被触发。虽然这不会直接导致代码执行,但利用此漏洞可导致控制台日志泛滥或潜在的内核资源耗尽,造成拒绝服务。