どのモジュールがカーネルを汚染しているかを確認するには?

どのモジュールがカーネルを汚染しているかを確認するには?

特定のワイヤレスネットワークに接続すると、カーネルは引き続きパニック状態になります。バグレポートを送信したいのですが、私のカーネルが汚染されているようです。から/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]aintin /var/log/messagesまたはdmesgモジュールをロードするときに対応するエントリを見つけることができませんでした。私のカーネルはFedora 17の最新のカーネルである3.8.4-102.fc17.x86_64です。

修正するrts5139:モジュールが原因である可能性があります。古いカーネル3.8.3-103.fc17.x86_64を起動すると表示されますが、生成され、lsmodモジュールはリストされず、カーネルは汚染されません(0)。modinfo rts5139ERROR: Module rts5139 not found.lsmod/proc/sys/kernel/taint

私はこのモジュールをブラックリストに載せようとしました。

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

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

答え1

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

一般的な候補は、グラフィックドライバ(たとえこれがほとんど「排他的」ビットを設定すると思いますが)とワイヤレスドライバです。

lsmod出力に候補と思われる項目が見つかった場合は、実行して、出力に現在表示されているmodinfo <module-name>汚染intree: Yを引き起こすモジュールが含まれていることを確認してください。

修正するrts5139表示されているlsmodがシステムにはないように見えるモジュールはinitrdにあり、デフォルトのファイルシステムがマウントされる前に起動プロセスの最初にそこからロードされる可能性があります。

また、更新されたブラックリストでinitrdを再構築する必要があるため、ブラックリストが機能しない理由も説明します。 initrdを再構築すると、dracutとにかくモジュールが消えます。

答え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改行文字が1つだけ含まれます。実際の内容に関係なく、ファイルサイズは4,096バイトで記載されており、ファイルサイズを確認できません。od000012

答え4

起動ログを確認するか、初期段階(RWがディスクにインストールされる前)の起動プロセスを確認してください。これはinitrdの無効なモジュールかもしれません。

DKMSなどがありますか?

関連情報