
特定のワイヤレス ネットワークに接続すると、カーネルがパニック状態になります。バグ レポートを送信したいのですが、カーネルが汚染されているようです。送信元/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/messages
がdmesg
、モジュールがロードされるタイミングに対応するものは見つかりませんでした。私のカーネルは、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 バイトとしてリストされるため、ファイル サイズを確認することはできません。od
000012
答え4
ブートログを確認するか、初期段階(ディスクが RW でマウントされる前)のブートプロセスを監視してください。これは、initrd 内の不良モジュールである可能性があります。
DKMS またはそれに類するものを導入していますか?