Подтвердить что ты не робот

Kvm: проверка модуля не выполнена: подпись и/или требуемый ключ отсутствует - повреждение ядра

Я использую 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.
Все компилируется без предупреждение. Любая помощь приветствуется!

4b9b3361

Ответ 1

Кажется, что поставщик вашей системы включил проверку подлинности модуля ядра на своем ядре, что означает, что он не будет загружать какой-либо модуль, который поставщик не подписал, Другими словами, ваш исправленный модуль не подписан (правильно), и ядро ​​откажется его загрузить.

Предполагается, что это мешает вредоносным программам и руткитам загружать вредоносные модули ядра.

Я предлагаю вам обратиться к вашему поставщику. На вашей платформе может быть опция, позволяющая отключить проверку подписи. В противном случае ваш поставщик может подписать модуль для вас. У вас может быть даже ключ и детали алгоритма проверки подписи и вы можете сами его подписать.

Не зная, на какой платформе вы работаете, трудно дать более конкретные предложения.

Ответ 2

Вместо повторной настройки ядра эту ошибку (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

Ответ 3

В общем случае, если вы создаете собственное ядро ​​и используете make oldconfig. Это копирует удаляемый конфигурационный файл из /boot. В настоящее время большинство модулей ядра должны быть подписаны поставщиком 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

Ответ 4

Перейдите в исходный каталог ядра и выполните (например,):

./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"