我使用的是Ubuntu 14.04 LTS
和内核版本3.13.11.4
。
我尝试加载已修补的KVM模块kvm
和kvm-intel
,但收到以下错误kvm: module verification failed: signature and/or required key missing - tainting kernel
个
和kvm: module has bad taint, not creating trace events
的元素。
使用的源与创建当前运行的映像的源相同。
我已经检查了符号,并确保错误不是由于在导出函数的修补文件中没有包含EXPORT_SYMBOL_GPL()
而导致的。
我也看到过一些关于不同内核版本导致这个错误的东西,但是我构建的内核是用我用来创建补丁kvm模块的同一个源代码引导的。
一切编译没有警告。任何帮助是感谢!
4条答案
按热度按时间bpzcxfmw1#
不需要重新配置内核,这个错误(
module verification failed
)可以通过在模块本身的Makefile
的顶部添加一行CONFIG_MODULE_SIG=n
来解决:字符串
ghhaqwfi2#
转到内核源目录并执行以下操作(例如):
字符串
型
通过打开
.config
并在CONFIG_MODULE_SIG
配置值中阅读它来检查内核正在使用的摘要算法。型
注意事项:如果你正在使用一个你没有构建的现有内核,请通过查看相应的配置文件来检查内核正在使用的摘要算法,主要是在
/proc/*
或/boot/*
中。对于Ubuntu,在/boot/config-$(uname -r)
中。7vux5j2d3#
看起来你的系统供应商已经在你的内核上启用了kernel module signature verification,这意味着它不会加载任何供应商没有签名的模块。换句话说,你的补丁模块没有签名(正确),内核将拒绝加载它。
这样做的目的是防止恶意软件和rootkit加载恶意内核模块。
我建议您联系您的供应商。您的平台上可能有一个选项可以禁用签名检查。否则,您的供应商可能能够为您签名模块。您甚至可能拥有密钥和签名验证算法的详细信息,并且可以自己签名。
如果不知道你在什么平台上运行,就很难给出给予更具体的建议。
guykilcj4#
一般来说,如果您正在构建自定义内核并使用
make oldconfig
。这将从/ Boot 复制现有的config-* 文件。现在大多数内核模块都需要由Linux供应商签名。因此,在编译内核之前,请编辑.config并禁用CONFIG_MONIC_SIG_ALL和CONFIG_MONIC_SIG。字符串