CVE-2026-31588Linux内核的KVM子系统中存在一个释放后重用漏洞。当KVM处理模拟的MMIO写入操作时,如果写入操作跨越页面边界且两个页面均为MMIO页面,该请求会被拆分为两个片段。如果源数据位于栈上的局部变量中,且第二个片段在原始栈帧可能已被销毁或被不同任务处理时才被引用,就会触发释放后重用错误。该漏洞可能导致系统崩溃或潜在的权限提升,CVSS评分为8.8,属于高危漏洞。
该漏洞源于Linux内核KVM在处理跨越MMIO页面边界的写入请求时的逻辑缺陷。由于KVM ABI仅允许物理连续的MMIO请求,跨越页面的访问会被分离成两个片段依次发送到用户空间处理。漏洞触发的核心在于:当模拟器使用栈上的局部变量作为源数据进行写入,且该写入操作恰好跨越了两个MMIO页面时,KVM在处理完第一个片段并等待后续处理时,原始任务的栈帧可能已经释放或被覆盖。当KVM尝试处理第二个片段并再次引用该栈变量时,就会触发Use-After-Free。KASAN报告显示,这通常发生在complete_emulated_mmio函数中。修复方案是将8字节及以下的小写入值复制到MMIO片段结构体的暂存字段中,而非直接指向源地址,从而确保数据的生命周期安全。