web-dev-qa-db-ja.com

Linuxの汚染されたカーネルとは何ですか?

特定の条件下では、Linuxカーネルが汚染になる場合があります。たとえば、独自のビデオドライバをカーネルにロードすると、カーネルが汚染されます。この状態は、システムログ、カーネルエラーメッセージ(おっとパニック)、およびlsmodなどのツールを介して表示され、システムが再起動されるまで表示されます。

これは何を意味するのでしょうか?システムを使用する能力に影響しますか?また、サポートオプションにどのような影響がありますか?

104
bwDraco

カーネルが汚染されている場合は、コミュニティでサポートされていない状態にあることを意味します。ほとんどのカーネル開発者は汚染されたカーネルに関するバグ報告を無視します。コミュニティメンバーは、カーネルに関連する問題の診断に進む前に汚染状態を修正するように依頼する場合があります。さらに、カーネルが汚染されていると、一部のデバッグ機能とAPI呼び出しが無効になる場合があります。

プロプライエタリドライバーを含むほとんどの場合、汚染状態を無視しても安全ですが、カーネルが汚染される原因となるいくつかのシナリオは、深刻なシステム問題を示している可能性があります。

この機能は、カーネルの問題の適切なトラブルシューティングを困難にする可能性のある状態を特定することを目的としています。たとえば、カーネル開発者はモジュールのソースコードにアクセスできず、モジュールがカーネルに対して何を行ったかを判断できないため、専用モジュールをロードすると、カーネルデバッグ出力の信頼性が失われる可能性があります。同様に、カーネルで以前にエラー状態が発生した場合、または深刻なハードウェアエラーが発生した場合、カーネルによって生成されたデバッグ情報は信頼できない場合があります。

カーネルは、以下を含む(ただしこれらに限定されない)いくつかの理由のいずれかのために汚染される可能性があります。

  • 独自仕様の(またはGPL非互換の)カーネルモジュールの使用-これは汚染されたカーネルの最も一般的な原因であり、通常、独自仕様のNVIDIAまたはAMDビデオドライバーの読み込みに起因します。
  • stagingドライバーの使用。これは、カーネルソースコードの一部ですが、完全にはテストされていません
  • Linuxカーネルソースコードに含まれていないout-of-treeモジュールの使用
  • カーネルモジュールの強制的なロードまたはアンロード(現在のバージョンのカーネル用にビルドされていないモジュールを強制的に挿入するなど)
  • サポートされていない特定のユニプロセッサCPU、主に古いAMD AthlonプロセッサでのSMP(マルチプロセッサ)カーネルの使用
  • [〜#〜] acpi [〜#〜] DSDTのオーバーライド。電源管理のバグを修正するために必要な場合があります(詳細は こちら を参照)
  • machine check exceptions および kernel oopses などの特定の重大なエラー条件
  • カーネルが回避しなければならないシステムファームウェア(BIOS、UEFI)の特定の重大なバグ

これらの各条件は、カーネル内の特定のフラグによって表されます。 SUSEなどの一部のLinuxベンダー 追加の汚染フラグを追加によってサポートされていないモジュールのロードなどの条件を示します提供事業者。

詳細は kernel documentation を参照してください。そこにリストされている汚染フラグがあります(「空白」の代用)

  • G | P:ロードされたすべてのモジュールにGPLまたは互換性のあるライセンスがある場合はG、そうでない場合は専用モジュールがロードされています。 MODULE_LICENSEがないモジュール、またはinsmodでGPL互換として認識されないMODULE_LICENSEがあるモジュールは、独自仕様であると見なされます。
  • F | _:モジュールが「insmod -f」によって強制的にロードされた場合。それ以外の場合、すべてのモジュールが正常にロードされた場合。
  • S | _:マルチプロセッサを実行しても安全であると認定されていないハードウェアで実行されているSMPカーネルでoopが発生した場合。現在、これはSMPに対応していないさまざまなAthlonでのみ発生します。
  • R | _:モジュールがrmmod -fによって強制的にアンロードされた場合、それ以外の場合はすべてのモジュールが正常にアンロードされた場合。
  • M | _:プロセッサが マシンチェック例外 を報告した場合、それ以外の場合はマシンチェック例外は発生しません。
  • B | _:ページ解放機能が不良ページ参照または予期しないページフラグを検出した場合。
  • U | _:ユーザーまたはユーザーアプリケーションが汚染フラグの設定を特に要求した場合。
  • D | _:カーネルが最近停止した場合、つまり [〜#〜] oops [〜#〜] があった場合=またはバグ。
  • A | _:ACPIテーブルがオーバーライドされている場合。
  • W | _:警告が以前にカーネルによって発行された場合(ただし、一部の警告はより具体的な汚染フラグを設定する場合があります。)
  • C | _:ステージングドライバがロードされている場合。
  • I | _:プラットフォームファームウェア(BIOSなど)の重大なバグをカーネルが回避している場合。
  • O | _:外部で構築された(「ツリー外」)モジュールがロードされた場合。
  • E | _:署名されていないモジュールがモジュール署名をサポートするカーネルにロードされている場合。
  • L | _:以前にシステムでソフトロックアップが発生した場合。
  • K | _:カーネルにライブパッチが適用されている場合。
133
bwDraco