假设我应用了(或已通过自动更新流程为我应用了)一个微代码更新,该更新修复了以下问题:超线程错误在我的 Skylake 芯片上。
这些更新是否不可逆,或者我以后可以切换回早期的微码?
答案1
由于微码更新不是持久性的,因此它本身始终可以回滚,但如果该更新是从固件(即 UEFI/BIOS)进行的,则您可能需要刷新修改后的固件来执行此操作:
在较新的 Intel 平台上,微代码更新可能会禁止热降级出于安全原因(有三个微码版本字段:修订版、“SVN”和“VCN”,后两个是非官方名称,因为它们没有记录。你不应该热降级由于安全和/或稳定性原因,您无法将 VCN 或 SVN(参见 [1])降级。这意味着您需要修改固件映像中的微代码才能降级。请注意,操作系统内核本身已经拒绝降级微代码修订版,因此无论如何您都必须解决这个问题。
也很少微码更新[到目前为止,这些更新从未向公众发布过,仅向固件 OEM 发布,例如英特尔 Westmere 0x206c2 微代码更新] 有持续的副作用例如,通过更改存储在平台 TPM 中的数据。这些持续的副作用是出于安全原因而存在的,以避免“降级攻击”在 Intel TXT 和/或 Intel SGX 上。在这种情况下,微代码更新可以轻松回滚,但它可能会在系统中留下持久的副作用,从而禁止回滚其他固件组件(例如,用于 Intel TXT 的 SINIT ACM)——如果您确实回滚这些固件组件,处理器将在任何微码修订,直到再次升级固件组件。
[1]https://github.com/platomav/MCExtractor/wiki/Intel-Microcode-Extra-Undocumented-Header
答案2
这取决于微码更新的应用方式。每次系统启动时,都会通过主板固件或操作系统修补微码,因此这取决于回滚这些更新的难易程度。
如果更新来自固件,那么应该像“更新”到旧版本一样简单,假设它不进行任何检查并抱怨您正在升级到旧版本。如果微码来自 Linux,那么应该像使用包管理器一样简单安装旧版本.[1] 如果更新来自 Windows,则可能很容易,也可能很难,因为你可以通过控制面板轻松删除更新,但它不会让你删除“影响重要的操作系统文件“”。
[1] 事实上,在 Linux Mint(可能还有其他版本)中,你可以很容易地在设置中禁用微代码更新。它实际上是默认关闭的,因为它是专有代码,而 Linux Mint 希望默认配置仅为开源。