kvm:模块验证失败:签名和/或所需密钥丢失 - 污染内核

问题描述 投票:0回答:4

我正在使用

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 模块相同的源启动的内核。
一切都在没有警告的情况下进行编译。如有任何帮助,我们将不胜感激!

c linux linux-kernel kernel-module kvm
4个回答
32
投票

无需重新配置内核,只需在模块本身的

module verification failed
顶部添加一行
CONFIG_MODULE_SIG=n
即可解决此错误 (
Makefile
):

CONFIG_MODULE_SIG=n

# If KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq ($(KERNELRELEASE),)
    obj-m := hello.o

# Otherwise we were called directly from the command
# line; invoke the kernel build system.
else
    KERNELDIR ?= /lib/modules/$(shell uname -r)/build
    PWD := $(shell pwd)

default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif

20
投票

转到内核源代码目录并执行(例如):

./scripts/sign-file sha512 ./signing_key.priv ./signing_key.x509 /lib/modules/3.10.1/kernel/drivers/char/my_module.ko

对于内核 4.4.*,按键位置应如下:

./scripts/sign-file sha512 ./certs/signing_key.pem ./certs/signing_key.x509 path/to/your/kernel/module.ko 

打开

.config
并在
CONFIG_MODULE_SIG
配置值中读取它,检查您的内核正在使用什么摘要算法。

CONFIG_MODULE_SIG=y CONFIG_MODULE_SIG_ALL=y CONFIG_MODULE_SIG_SHA512=y CONFIG_MODULE_SIG_HASH="sha512"

注意:如果您使用的是不是您构建的现有内核,请通过查看相应的配置文件(主要在

/proc/*
/boot/*
中)来检查内核正在使用的摘要算法。对于Ubuntu的情况,在
/boot/config-$(uname -r)


16
投票

您的系统供应商似乎已在您的内核上启用了内核模块签名验证,这意味着它不会加载供应商尚未签名的任何模块。换句话说,您的修补模块没有(正确)签名,内核将拒绝加载它。

这样做的目的是为了防止恶意软件和 rootkit 加载恶意内核模块。

我建议您联系您的供应商。您的平台上可能有一个选项可以禁用签名检查。否则,您的供应商也许能够为您签署该模块。您甚至可能拥有密钥和签名验证算法的详细信息,并且可以自己对其进行签名。

在不知道你运行在什么平台上的情况下,很难给出更具体的建议。


13
投票

一般来说,如果您正在构建自定义内核并使用

make oldconfig
。这将从 /boot 复制现有的 config-* 文件。现在大多数内核模块都需要由 Linux 供应商签名。因此,在编译内核之前,编辑 .config 并禁用 CONFIG_MODULE_SIG_ALL 和 CONFIG_MODULE_SIG。

CONFIG_MODULE_SIG=n
CONFIG_MODULE_SIG_ALL=n
# CONFIG_MODULE_SIG_FORCE is not set 
# CONFIG_MODULE_SIG_SHA1 is not set
# CONFIG_MODULE_SIG_SHA224 is not set
# CONFIG_MODULE_SIG_SHA256 is not set
# CONFIG_MODULE_SIG_SHA384 is not set
© www.soinside.com 2019 - 2024. All rights reserved.