kvm: la vérification du module a échoué: signature et / ou clé requirejse manquante – kernel corrompu

J’utilise Ubuntu 14.04 LTS et la version du kernel 3.13.11.4 .
J’essaie de charger les modules KVM patchés kvm et kvm-intel et kvm-intel les erreurs suivantes

kvm: module verification failed: signature and/or required key missing - tainting kernel
et kvm: module has bad taint, not creating trace events .

La source utilisée est la même source que celle qui a créé l’image que je suis en train d’exécuter.
J’ai vérifié les symboles et fait en sorte que l’erreur ne soit pas EXPORT_SYMBOL_GPL() par ne pas inclure EXPORT_SYMBOL_GPL() dans les fichiers corrigés où j’ai exporté des fonctions.

J’ai également vu des choses sur différentes versions du kernel causant cette erreur, mais j’ai construit le kernel avec lequel j’ai démarré avec la même source que celle utilisée pour créer les modules kvm corrigés.
Tout comstack sans avertissement. Toute aide est appréciée!

Il semble que le fournisseur de votre système ait activé la vérification de la signature du module du kernel sur votre kernel, ce qui signifie qu’il ne chargera aucun module que le fournisseur n’a pas signé. En d’autres termes, votre module patché n’est pas signé (correctement) et le kernel refusera de le charger.

Le but de ceci est censé empêcher les logiciels malveillants et les rootkits de charger des modules de kernel malveillants.

Je vous suggère de contacter votre fournisseur. Il peut y avoir une option quelque part sur votre plate-forme pour désactiver la vérification des signatures. Sinon, votre fournisseur pourra peut-être signer le module pour vous. Vous pourriez même avoir la clé et les détails de l’algorithme de vérification de signature et vous pouvez le signer vous-même.

Sans savoir quelle plate-forme vous utilisez, il est difficile de donner des suggestions plus spécifiques.

Au lieu de reconfigurer le kernel, cette erreur ( module verification failed ) pourrait être résolue en ajoutant simplement une ligne CONFIG_MODULE_SIG=n en haut du Makefile du module lui-même:

 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 

Allez dans le répertoire source du kernel et faites (par exemple):

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

pour le kernel 4.4. *, l’emplacement des clés doit être le suivant:

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

Vérifiez quel est l’algorithme de résumé utilisé par votre kernel en ouvrant .config et en le lisant dans les valeurs de configuration CONFIG_MODULE_SIG .

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

En général, si vous construisez un kernel personnalisé et utilisez make oldconfig . Ceci copie le fichier config- * sortant de / boot. Maintenant, la plupart des modules du kernel doivent être signés par le fournisseur Linux. Modifiez donc le fichier .config et désactivez CONFIG_MODULE_SIG_ALL et CONFIG_MODULE_SIG avant de comstackr le 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