Linux 7.3开发周期本周发布了一项关键修复,通过修改内存管理代码中的一行内容,解决了一个在常见生产环境下导致用户数据静默丢失的漏洞。此时距离引入该问题的代码提交已过去三年。
开发人员于2026年9月初发现并可靠复现了该问题。触发条件看似苛刻:需同时启用透明大页(THP)、进程处于cgroup内存限制内、应用调用带MADV_FREE标志的madvise、随后再次写入内存并面临大量回收压力。然而,这些条件在生产环境中并不罕见。一旦满足,写入操作将在无任何错误或警告的情况下消失。
漏洞影响与根源
流行数据分析库Polars在实际部署中遭遇了此漏洞,导致生产数据集直接消失,且未留下堆栈跟踪或内核日志。该问题可追溯至2023年7月,存在于从6.6版本开始的所有内核中。媒体报道于2026年9月14日首次披露了该补丁及其背景。
根本原因在于pmd_modify()函数。该函数用于更新大页的页面中间目录项,但在运行时错误地屏蔽了硬件脏位(dirty bit)。尽管后续调用试图保存脏状态,但由于位已被剥离,无内容可供保存。因此,即使用户空间在MADV_FREE提示后写入新数据,页面在回收代码看来仍是“干净”的,从而被错误回收。
此路径不仅影响匿名内存,文件支持的透明大页同样会丢失写入。NUMA平衡和mprotect权限切换也会触发相同序列。与之形成对比的是,等效的pte_modify和pud_modify均能保持脏位完整,唯独PMD版本存在这一不一致性,且在2023年的代码审查及后续合并中一直被忽视。
修复与应对建议
该补丁已在7.3-rc3标签后通过x86/urgent分支合并,仅通过恢复pmd_modify掩码中的_PAGE_DIRTY标志,便使现有的保存脏位机制按预期工作。稳定内核维护者已将其标记为向后移植,意味着6.6及更高版本将很快收到此修复。
鉴于Polars等库对高效内存处理的依赖,启用THP的内存受限容器系统面临最高风险。运行数据库、分析引擎或混合大型匿名映射与内存限制工作负载的企业运营商,应立即测试修补后的内核。公开的复现案例显示,单个进程执行特定内存操作序列可在几分钟内演示数据丢失,实际生产环境可能已受波及。
此次事件凸显了现代内核内存功能的复杂性:透明大页提升了性能,却增加了缺页异常和回收路径的复杂度。与rc3版本中规模较大的XFS和SMB客户端文件系统改动不同,该内存管理补丁因其在无可见内核错误的情况下损坏应用状态而显得尤为隐蔽。解决方案的极简性——仅需正确保留不应被屏蔽的硬件位——与其长达三年的潜伏期形成鲜明对比。