_Ubuntu 14.04 LTS
_とカーネルバージョン_3.13.11.4
_を使用しています。
パッチを適用しようとしているKVMモジュールkvm
および_kvm-intel
_
_
kvm: module verification failed: signature and/or required key missing - tainting kernel
_
and _kvm: module has bad taint, not creating trace events
_。
使用されるソースは、現在実行しているイメージを作成したソースと同じです。
シンボルをチェックし、関数をエクスポートしたパッチが適用されたファイルにEXPORT_SYMBOL_GPL()
を含めないことでエラーが発生しないことを確認しました。
また、このエラーの原因となるさまざまなカーネルバージョンに関するものを見てきましたが、パッチを適用したkvmモジュールの作成に使用したのと同じソースで起動したカーネルを構築しました。
警告なしですべてがコンパイルされます。どんな助けも大歓迎です!
システムのベンダーがカーネルで カーネルモジュール署名の検証 を有効にしているようです。つまり、ベンダーが署名していないモジュールはロードされません。言い換えると、パッチを適用したモジュールは(適切に)署名されておらず、カーネルはそれをロードすることを拒否します。
これのポイントは、マルウェアとルートキットが悪意のあるカーネルモジュールをロードするのを防ぐことです。
ベンダーに連絡することをお勧めします。プラットフォームのどこかに署名チェックを無効にするオプションがある場合があります。そうしないと、ベンダーがモジュールに署名できる可能性があります。鍵と署名検証アルゴリズムの詳細があり、自分で署名することもできます。
実行しているプラットフォームを知ることなく、より具体的な提案をすることは困難です。
カーネルを再構成する代わりに、このエラー(module verification failed
)1行追加するだけで解決できます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
カーネルソースディレクトリに移動して、次の操作を行います(例:)
./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"
一般に、カスタムカーネルを構築してmake oldconfig
を使用している場合。これにより、既存のconfig- *ファイルが/ 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