上周,Google 工程师发现了一个引用数据下溢(reference count underflow)问题,且一路可追溯到 2017 年的 Linux 4.14 内核。这个偶然发现的问题,会导致内存从一个进程泄露到另一个进程。为化解此类内存缺陷,Google 提出了一个全新的“页表检查”(Page Table Check)解决方案。
问题从 Linux 4.14 延续到 Linux 5.16(来自:Kernel.org)
除了 Google,近期还有不少合并提交修复了其它引用计数问题。但若“页表检查”功能推广开来,Linux 内核就会在页表条目插入 / 删除时,检查是否存在非法共享。
若检测到内存遭到破坏,内核也会以崩溃作为回应。此外需要注意的是,额外检查会导致一些性能影响、以及额外的内存资源开销。
基于此,“页表检查”功能不会在默认情况下开启。有需要的用户,需在手动激活 PAGE_TABLE_CHECK 的情况下进行构建。
然后在运行时,还要动用 page_table_check=on 这个内核启动参数。感兴趣的朋友,可移步至内核邮件公告列表(LKML)获取更多细节。
最后,作为单独补丁系列的一部分,我们还于本周二迎来了一组页面强化(hardening page _refcoount)。
参与其中的 Google 工程师,希望改进围绕引用计数代码的调试、并减少内存破坏等相关问题。