Linux 6.7全面改進x86 CPU微碼載入方式
最近,社群在清理Linux 上的Intel/AMD x86 CPU 微程式碼載入方面做了大量的工作,這些工作現已合併到Linux 6.7 中。由於在啟動時載入CPU 微程式碼對於減少不斷出現的新CPU 安全漏洞以及有時解決功能問題非常重要,Thomas Gleixner 最近開始清理x86 CPU 微程式碼載入功能,並在此過程中進行了各種改進。
Linux 6.7 中對x86 微程式碼載入的一些改進包括:在啟用分頁之前不在32 位元上載入微程式碼,以避免各種問題;重新修改CPU 微程式碼的後期載入;後期載入的微程式碼現在對CPU 熱插拔操作更友善;以及確定後期微程式碼載入何時被認為是安全的最小微程式碼版本概念。
x86 處理器/微程式碼的亮點摘要如下:
– 重組所需的程式碼,並在32 位元上新增臨時initrd 映射,以便載入器可以存取微碼Blob。這本身就是為下一個重大改進做準備:
– 在啟用分頁之前,請勿在32 位元載入微代碼。在過去,處理這個問題會帶來無盡的麻煩、問題、難看的程式碼和不必要的破解。而且從一開始就沒有任何合理的理由這樣做。因此,將32 位元載入改為在啟用分頁後進行,並再次將載入器程式碼變成”真正純淨”。
– 在英特爾系統中放棄混合微碼步進載入–在整個系統中載入一個補丁就足夠了
– 重新設計後期加載,追蹤哪些CPU 已成功更新微代碼,哪些尚未更新,並採取相應行動
– 將英特爾上的後期微程式碼載入移至NMI 上下文,以確保所有執行緒上的並發載入
– 使後期載入對CPU 熱插拔安全,並為更新目的喚醒離線線程
– 增加對最小修訂版的支持,以確定後期微代碼加載在機器上是否安全,並且微代碼不會更改機器無法使用的軟體可見功能,因為功能檢測已經發生。粗略地說,最小版本號是系統目前必須載入的最小版本號,以便允許後期更新。
– 其他一些很好的清理、修復等。
這些改進已合併到Linux 6.7 中:
https://lore.kernel.org/lkml/20231103110600.GAZUTUGFjhoLm1KZzE@fat_crate.local/