针对“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