web-dev-qa-db-fra.com

kvm: échec de la vérification du module: signature et / ou clé requise manquantes - tainting kernel

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
et kvm: 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!

24
user2743

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.

10
tangrs

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
21
artm

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"
11
P Royo

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
10
askb