Googleは、KCSANを使用してLinuxカーネルで数百の競合状態を発見しました

Linuxカーネル

Googleのエンジニア Linuxカーネルに貢献する KCSANを使用したカーネルで、何百もの「競合状態」を発見したと発表しました。 同社は長い間、AddressSanitizerに取り組んでおり、メモリ破損に関連するエラーや、コード内の未定義の動作に対するUndefinedBehaviorSanitizerを見つけています。

今回は Googleは、KCSANと呼ばれるLinuxカーネル用の新しい「競合状態」検出器を提供しています (カーネル同時実行サニタイザー)。 これらの重大な脆弱性は新しいものではありません。 実際には 競合状態は、同じプロセス内のXNUMXつ以上のスレッドが同じメモリ位置に同時にアクセスする場合に発生します、アクセスの少なくともXNUMXつが書き込みであり、スレッドがこのメモリへのアクセスを制御するために排他ロックを使用しない場合。

これらの条件が満たされている場合、アクセス順序は決定論的ではなく、計算により、この順序に応じて実行ごとに異なる結果が得られる場合があります。

競合状態は、同時アクセスエラーとしてますます見られており、複製が困難です。 並列プログラムで診断します。 Linuxカーネルは大規模なソフトウェアシステムであり、スレッド集約型の並列処理と非決定論的なスレッドのインターリーブは、競争条件の影響を受けやすくなっています。

いくつかの競争状況は良性である可能性がありますが、これまでに特定されたそれらの多くは間違いと見なされます。

Linuxカーネルは、これらのタイプの状態を回避および管理するためのいくつかのメカニズムを提供します Linuxカーネルの重大な実行エラーを検出するためのスレッドアナライザーやKTSAN(カーネルスレッドサニタイザー)などのツールがあるためです。

しかし、Linuxカーネルにも貢献しているGoogleは、最近KCSANを提案しました、KTSANと同様に、カーネルの新しい競合状態検出器。

グーグルによると、KCSANはカーネルコードの競争状況の発見に焦点を当てています。 この動的クリティカルヒット検出器は、カーネルスレッドサニタイザー(KTSAN)の代替手段です。

グーグルの説明によると、 KCSANは、KTSAN検出器とは異なり、サンプリング監視ポイントに基づいています。 これは、イベント前の重要なレース検出器です。 KCSAN設計の重要な優先事項は、誤検知の欠如、スケーラビリティ、および単純さです。

KCSANは、コンパイルツールを使用してメモリにアクセスします。 KCSANは、GCCおよびClangコンパイラーと互換性があります。 GCCではバージョン7.3.0以降が必要であり、Clangではバージョン7.0.0以降が必要です。

プロジェクトのGitHubページGoogleのMarcoElverは、先月のテストでKCSANを使用したところ、わずか300日でXNUMXを超えるユニークなコア競争状況が見つかったと書いています。 KCSANは、その動作をカスタマイズするためのいくつかの構成オプションを提供します。

「私たちはSyzkallerを通じてKCSANを数週間使用してきましたが、多くのバグが見つかりました。 当初、2019年300月に、わずかXNUMX日間でXNUMXを超える独自の競争状況を特定しました」と彼は書いています。

グーグルは、一般的なアプローチはDataColliderに基づいていると述べた、 カーネルモジュールの競合状況の別の動的検出器。 ただし、DataColliderとは異なり、KCSANはハードウェア監視ポイントを使用せず、代わりにコンパイルツールに依存します。

監視ポイントは、タイプ、サイズ、およびアクセスアドレスを長いファイルに格納する効率的なエンコーディングを使用して実装されます。 柔軟な監視ポイントを使用する利点は、移植性と、監視ポイントがアクティブ化できるアクセスを制限する際の柔軟性が高いことです。

KCSANがGoogleのために作成した重要なポイントのいくつかを次に示します。

  • ハイパフォーマンス: KCSANランタイムは最小限であり、アクセスごとに共有状態のロックを必要としません。 その結果、KTSANよりもはるかに優れたパフォーマンスが得られます。
  • 追加のメモリなし: Googleによると、キャッシュは必要ありません。 現在の実装では、監視ポイント情報をエンコードするために少数の長さを使用していますが、これはごくわずかです。
  • メモリコマンド: KCSANは、Linuxカーネルメモリモデル(LKMM)の制御ルールを認識していません。 これにより、KTSANのようなイベント前のレース検出器と比較して、クリティカルレースが失われる(フォールスネガティブ)可能性があります。
  • 精度: Googleによると、KCSANはサンプリング戦略を使用しているため、不正確です。
  • 注釈が必要です: KCSANランタイムの外部では最小限の注釈が必要です。 前提条件イベントリスナーの場合、省略すると誤検知が発生します。これは、カスタムタイミングメカニズムを含むカーネルのコンテキストでは特に重要です。
  • デバイスからの動的書き込みの検出: ウォッチポイントのセットアップ中にデータ値をチェックすることで、デバイスからの動的書き込みも検出できます。

コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:AB Internet Networks 2008 SL
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。