J'utilise Ubuntu 14.04 LTS
Et la version du noyau 3.13.11.4
.
J'essaie de charger des correctifs KVM modules kvm
et kvm-intel
Et j'obtiens les erreurs suivantes
kvm: module verification failed: signature and/or required key missing - tainting kernel
etkvm: module has bad taint, not creating trace events
.
La source utilisée est la même source qui a créé l'image que j'exécute actuellement.
J'ai vérifié les symboles et vérifié que l'erreur n'est pas causée en n'incluant pas EXPORT_SYMBOL_GPL()
dans les fichiers corrigés où j'ai exporté des fonctions.
J'ai également vu des informations sur différentes versions du noyau provoquant cette erreur, mais j'ai construit le noyau dans lequel je suis démarré avec la même source que celle utilisée pour créer les modules kvm corrigés.
Tout se compile sans avertissement. Toute aide est appréciée!
Il semble que le vendeur de votre système ait activé vérification de la signature du module du noya sur votre noyau, ce qui signifie qu'il ne chargera aucun module que le vendeur n'a pas signé. En d'autres termes, votre module patché n'est pas signé (correctement) et le noyau refusera de le charger.
Le but est d'empêcher les logiciels malveillants et les rootkits de charger des modules du noyau 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 de signature. Sinon, votre fournisseur pourra 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 pouvez le signer vous-même.
Sans savoir sur quelle plateforme vous utilisez, il est difficile de donner des suggestions plus spécifiques.
Au lieu de reconfigurer le noyau, cette erreur (module verification failed
) pourrait être résolu en ajoutant simplement une ligne CONFIG_MODULE_SIG=n
en haut de Makefile
pour le 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 noyau 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 noyau 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é que votre noyau utilise en ouvrant .config
et le lire dans CONFIG_MODULE_SIG
valeurs de configuration.
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 noyau personnalisé et utilisez make oldconfig
. Ceci copie le fichier config- * sortant de/boot. Aujourd'hui, la plupart des modules du noyau devaient être signés par le fournisseur Linux. Modifiez donc le .config et désactivez CONFIG_MODULE_SIG_ALL et CONFIG_MODULE_SIG, avant de compiler le noyau.
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