Google提議用「頁表檢查」功能應對Linux內核的記憶體崩壞問題
上周,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 工程師,希望改進圍繞引用計數代碼的調試、並減少記憶體破壞等相關問題。