どのモジュールがカーネルを汚染しているかを判断するにはどうすればよいでしょうか?

どのモジュールがカーネルを汚染しているかを判断するにはどうすればよいでしょうか?

特定のワイヤレス ネットワークに接続すると、カーネルがパニック状態になります。バグ レポートを送信したいのですが、カーネルが汚染されているようです。送信元/var/log/messages:

Apr 17 21:28:22 Eiger kernel: [13330.442453] Pid: 4095, comm: kworker/u:1 Tainted: G           O 3.8.4-102.fc17.x86_64 #1

そして

[root@Eiger ~]# cat /proc/sys/kernel/tainted 
4096

4096ビットマスクが何を意味するのかについての文書を見つけることができませんでしたただし、このGフラグは外部GPLモジュールがカーネルにロードされていることを意味しますどのモジュールがカーネルを汚染しているかを調べるにはどうすればいいですか?

[Tt]aintまたは を grep しました/var/log/messagesdmesg、モジュールがロードされるタイミングに対応するものは見つかりませんでした。私のカーネルは、Fedora 17 の最新カーネル 3.8.4-102.fc17.x86_64 です。

アップデート: モジュールが原因である可能性がありますrts5139。 に表示されますlsmodが、以前のカーネル 3.8.3-103.fc17.x86_64 を起動modinfo rts5139するERROR: Module rts5139 not found. と、このモジュールは にリストされずlsmod、カーネルは汚染されていません (/proc/sys/kernel/taintは 0 です)。

このモジュールをブラックリストに登録してみました

echo 'blacklist rts5139' >> /etc/modprobe.d/blacklist.conf

しかし、再起動してもカーネルが汚染されていると表示されます。

答え1

まあ、標準の Fedora カーネル パッケージには、この汚染を引き起こすモジュールは含まれていないと思いますので、質問は、他にどのようなカーネル モジュールをインストールしたかということです。

一般的な候補としては、グラフィック ドライバー (ただし、これらは主に「独自」ビットを設定するものだと思います) とワイヤレス ドライバーが挙げられます。

lsmod出力の中に候補と思われるものが見つかった場合は、実行してmodinfo <module-name>、出力に、intree: Y表示されている汚染をトリガーするモジュールが含まれているかどうかを確認します。

アップデート:rts5139表示されているlsmodがシステム上には存在しないと思われるモジュールは、おそらく initrd にあり、メインのファイルシステムがマウントされる前のブート プロセスの早い段階でそこからロードされています。

これは、更新されたブラックリストを使用して initrd を再構築する必要があるため、ブラックリストが機能しない理由も説明しています。dracutただし、initrd を再構築すると、モジュールはいずれにせよ消えてしまいます。

答え2

➜  ~  dmesg | grep -i 'taint'
[   10.029333] vboxdrv: module verification failed: signature and/or required key missing - tainting kernel
[   10.029364] Disabling lock debugging due to kernel taint

答え3

別の方法としては、次taintの各モジュールのファイルを調べることです/sys/module

#!/bin/bash

cat /proc/modules |
while read module rest
do
    if [[ $(od -A n /sys/module/$module/taint) != " 000012" ]] ; then
        echo $module
    fi
done

モジュールに汚染がない場合、ファイルには「 」で表されるtaint改行のみが含まれます。実際の内容に関係なく、サイズはすべて 4,096 バイトとしてリストされるため、ファイル サイズを確認することはできません。od000012

答え4

ブートログを確認するか、初期段階(ディスクが RW でマウントされる前)のブートプロセスを監視してください。これは、initrd 内の不良モジュールである可能性があります。

DKMS またはそれに類するものを導入していますか?

関連情報