如何检查Linux内核是否启用了“Retpoline”?

如何检查Linux内核是否启用了“Retpoline”?

针对“Spectre”安全漏洞,引入“Retpoline”作为缓解风险的解决方案。不过,我读过一篇文章提到:

如果您在不使用 retpoline 的情况下构建内核CONFIG_RETPOLINE,则无法使用 retpoline 构建模块,然后期望它们加载 — 因为 thunk 符号不会导出。

如果你使用 retpoline 构建内核,你成功加载不是使用 retpoline 构建的模块。 (来源

是否有一种简单且通用/通用/统一的方法来检查内核是否启用了“Retpoline”?我想这样做,以便我的安装程序可以使用要安装的内核模块的正确版本。

答案1

如果您使用主线内核或大多数主要发行版的内核,检查完整 retpoline 支持的最佳方法(IE内核配置了CONFIG_RETPOLINE,并使用支持 retpoline 的编译器构建)的目的是在/sys/devices/system/cpu/vulnerabilities/spectre_v2.在我的系统上:

$ cat /sys/devices/system/cpu/vulnerabilities/spectre_v2
Mitigation: Full generic retpoline, IBPB, IBRS_FW

如果您想要更全面的测试,以在没有 systree 文件的情况下检测内核上的 retpolines spectre_v2,请查看如何spectre-meltdown-checker谈论事情。

答案2

在这种特定情况下,Stephen Kitt 的回答更加全面,因为 retpoline 支持也需要新的编译器版本。

但在一般情况下,大多数发行版都在以下位置之一提供内核配置文件:

  • /boot/config-4.xx.xx-...
  • /proc/config.gz

然后你可以简单地zgrep CONFIG_RETPOLINE /boot/config* /proc/config.gz

相关内容