最近,社區在清理Linux上的Intel/AMDx86CPU微代碼加載方面做大量的工作,這些工作現已合並到Linux6.7中。由於在啟動時加載CPU微代碼對於減少不斷出現的新CPU安全漏洞以及有時解決功能問題非常重要,ThomasGleixner最近開始清理x86CPU微代碼加載功能,並在此過程中進行各種改進。
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/