válida - kvm: error en la verificación del módulo: falta la firma y/o la clave requerida-corromper el núcleo
la firma del comprobante electrónico no es válida hacienda (4)
En general, si está creando un kernel personalizado y utilizando make oldconfig
. Esto copia el archivo config- * que sale de / boot. Hoy en día, la mayoría de los módulos del kernel deben estar firmados por el proveedor de Linux. Entonces edite el archivo .config y desactive CONFIG_MODULE_SIG_ALL y CONFIG_MODULE_SIG, antes de compilar el kernel.
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
Estoy usando Ubuntu 14.04 LTS
y kernel versión 3.13.11.4
.
Estoy intentando cargar los módulos KVM parcheados kvm
y kvm-intel
y kvm-intel
los siguientes errores
kvm: module verification failed: signature and/or required key missing - tainting kernel
ykvm: module has bad taint, not creating trace events
.
La fuente utilizada es la misma fuente que creó la imagen que estoy ejecutando actualmente.
He comprobado los símbolos y me he asegurado de que el error no sea la causa al no incluir EXPORT_SYMBOL_GPL()
en los archivos parcheados donde EXPORT_SYMBOL_GPL()
funciones.
También he visto algunas cosas sobre diferentes versiones del kernel que causan este error, pero he creado el kernel en el que he iniciado con la misma fuente que usé para crear los módulos kvm parcheados.
Todo se compila sin previo aviso. Cualquier ayuda es apreciada!
En lugar de volver a configurar el kernel, este error ( module verification failed
) podría resolverse simplemente agregando una línea CONFIG_MODULE_SIG=n
a la parte superior del Makefile
para el módulo en sí:
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
Parece que el proveedor de su sistema ha habilitado la verificación de la firma del módulo del kernel en su kernel, lo que significa que no cargará ningún módulo que el proveedor no haya firmado. En otras palabras, su módulo parcheado no está firmado (correctamente) y el núcleo se negará a cargarlo.
El objetivo de esto es evitar que el malware y los rootkits carguen módulos maliciosos del kernel.
Le sugiero que se ponga en contacto con su proveedor. Puede haber una opción en algún lugar de su plataforma para deshabilitar la comprobación de firmas. De lo contrario, su proveedor podrá firmar el módulo por usted. Incluso puede tener la clave y los detalles del algoritmo de verificación de firma y puede firmarlo usted mismo.
Sin saber en qué plataforma se está ejecutando, es difícil dar sugerencias más específicas.
Vaya al directorio de la fuente del kernel y haga (por ejemplo):
./scripts/sign-file sha512 ./signing_key.priv ./signing_key.x509 /lib/modules/3.10.1/kernel/drivers/char/my_module.ko
para el kernel 4.4. *, la ubicación de las llaves debe ser como sigue:
./scripts/sign-file sha512 ./certs/signing_key.pem ./certs/signing_key.x509 path/to/your/kernel/module.ko
Verifique cuál es el algoritmo de resumen que usa su núcleo abriendo .config
y leyéndolo en los valores de configuración CONFIG_MODULE_SIG
.
CONFIG_MODULE_SIG=y CONFIG_MODULE_SIG_ALL=y CONFIG_MODULE_SIG_SHA512=y CONFIG_MODULE_SIG_HASH="sha512"