对于“Spectre”安全漏洞,引入了“Retpoline”作为降低风险的解决方案。但是,我读过一篇文章提到:
如果你在没有 . 的情况下构建内核
CONFIG_RETPOLINE,则无法使用 retpoline 构建模块,然后期望它们加载 - 因为不会导出 thunk 符号。如果您使用 retpoline 构建内核,则可以成功加载不是使用 retpoline 构建的模块。(来源)
是否有一种简单且通用/通用/统一的方法来检查内核是否启用了“Retpoline”?我想这样做,以便我的安装程序可以使用要安装的正确构建的内核模块。
我想将用于签署内核模块的密钥对中的公钥添加到 system_keyring 中。然而,有一个问题:
通过命令cat /proc/keys | grep system_keyring,我得到了system_keyring的条目(ID)。但是,当尝试使用以下命令添加我的公钥时:keyctl padd asymmetric "" 0xXXXXXXXX</test/signing_key.x509,我收到“权限被拒绝”错误。
我认为这是由于“module_signing.txt”中描述的限制https://01.org/linuxgraphics/gfx-docs/drm/admin-guide/module-signing.html:
但请注意,如果新密钥的 X.509 包装器由添加密钥时已驻留在 .system_keyring 中的密钥有效签名,则内核将仅允许将密钥添加到 .system_keyring 中。
但是,我找不到任何文档来描述如何使用已驻留在 .system_keyring 中的密钥对“X.509 包装器”进行签名。
另外,我认为该密钥环中的密钥只是公钥。因此,即使我可以从密钥环中提取公钥并使用该公钥签署“X.509 包装器”,我什至认为它不会起作用。
无论如何,这里需要一些帮助。或者,即使有东西可以给我一个提示,告诉我如何将我的内核模块提交到 RedHat,以便它可以由 RedHat 签名并安装在用户的安装上,而无需重建内核?