谷歌工程師近日向 Linux 內核提交了一個新補丁,希望為其添加名為 mseal() 的系統調用「mseal() syscall」。
據介紹, 谷歌這個獨立于架構的系統調用最初由 Chrome OS 上的 Chrome 瀏覽器使用。當時 Glibc 也在動態鏈接器中進行類似的實驗,以在啟動時封裝所有不可寫的段。
通過 mseal() 可防止系統調用修改虛擬地址的元數據。最初支持的是針對 mprotect/pkey_mprotect、munmap、mmap 和 mremap 調用進行封裝。為了在 Chrome 和 V8 JavaScript 引擎中提供更好的保護,開發者正在尋求使虛擬內存區域的元數據不可變。
Glibc 的方案是在動態鏈接器中添加封裝,以便在啟動時對所有不可寫段進行封裝,這也將自動使所有應用程序受益。
Linus Torvalds 對 mseal() syscall 提出的模型表達了保留意見,目前這個提案并沒有直接被接受,需要修訂才能進化成適合上游的形式。
Linus 表示:
“我對添加某種’鎖定內存映射’ (lock down memory mappings) 模型沒有異議,但事實并非如此。
首先,最明顯的問題是提交信息無價值。
另外更根本的問題要嚴重得多——"ON_BEHALF_OF_KERNEL" 和 "ON_BEHALF_OF_USERSPACE" 整體完全不合邏輯,整體概念都需要重寫。因為這就是 remap_file_pages() “字面上”的系統調用定義?!?/p>