CVE-2026-43348Linux内核中的mshv_vtl模块存在一个安全缺陷,即在通过MSHV_ADD_VTL0_MEMORY注册VTL0内存时,计算pgmap->vmemmap_shift的值未限制在MAX_FOLIO_ORDER范围内。当物理内存范围具有极高的对齐度时,该值将超过内核支持的最大值,导致memremap_pages()函数触发警告并返回-EINVAL错误,从而使得内存注册操作失败。此问题可能导致依赖该功能的系统服务不可用。
该漏洞源于mshv_vtl驱动程序在处理内存注册请求时的逻辑错误。代码通过计算start_pfn和last_pfn按位或(OR)结果的尾随零数量来确定vmemmap_shift,旨在找到两端对齐的最大复合页阶数。然而,该计算结果未经过MAX_FOLIO_ORDER的钳位限制。例如,当物理内存范围对应start_pfn拥有35个尾随零时,生成的shift值将超过memremap_pages()所能接受的最大值,触发内核WARNING并返回-EINVAL,导致操作失败。此外,原有的错误处理路径硬编码了-EFAULT错误码,掩盖了真正的-EINVAL返回值。本地低权限攻击者可利用此漏洞造成拒绝服务。