カーネルを再構成する代わりに、このエラー (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"