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


17

对于“ Spectre”安全漏洞,引入“ Retpoline”是减轻风险的解决方案。但是,我读了一篇提到的文章:

如果您构建内核而没有 CONFIG_RETPOLINE,则无法使用retpoline来构建模块,然后再期望它们加载—因为不会导出thunk符号。

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

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

Answers:


21

如果您使用的是主线内核或大多数主要发行版的内核,则检查完整retpoline支持的最佳方法(,内核已配置CONFIG_RETPOLINE,并由具有retpoline的编译器构建)是寻找“完整的通用retpoline” ”中/sys/devices/system/cpu/vulnerabilities/spectre_v2。在我的系统上:

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

如果要进行更全面的测试,要在没有spectre_v2systree文件的情况下检测内核上的折线,请查看问题的解决方法spectre-meltdown-checker


2
要检查其他与熔化/光谱相关的漏洞,请运行$ grep . /sys/devices/system/cpu/vulnerabilities/*,这在Greg Kroah-Hartman的博客中建议
Alex Vong

1
谢谢@Alex; 我在回答具体问题,但这很有用-尽管我更喜欢head /sys/devices/system/cpu/vulnerabilities/*自己;-)。当前涵盖Meltdown / Spectre漏洞,但也应涵盖以后所有类似性质的漏洞(命名空间是有目的的通用)。
斯蒂芬·基特

@StephenKitt是的,head给出了更好的格式化输出。
Alex Vong

4

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

但通常,大多数发行版的内核配置文件位于以下位置之一:

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

那你就可以 zgrep CONFIG_RETPOLINE /boot/config* /proc/config.gz


4
我建议不要在中使用grepping /boot/config*,因为这可能会CONFIG_RETPOLINE在已安装但当前未运行的内核映像中找到,给人一种错误的安全感。检查/proc/config.gz或是/sys/...安全的,但是许多Linux发行版都没有编译内核/proc/config.gz

您能否使逻辑更聪明,并使用uname(或等效的syscall)来获取当前正在运行的内核,然后检查该特定的/ boot / config文件?
亚当·卢希恩布罗尔斯

@pts /boot/config-$(uname -r),然后呢?
muru 18-4-6的

2
使用/boot/config-$(uname -r)也不是万无一失的:它仍然不能保证配置匹配正在运行的内核。uname -r只要内核ABI 不变,发行版内核在多个版本中都保持相同。
史蒂芬·基特

谢谢大家的答复。您的答案和消息是有帮助的。
杨伟山
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.