CVE-2024-35798 in Linux情報

要約

〜によって VulDB • 2026年05月18日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

btrfs: read_extent_buffer_pages()における競合状態の修正

tree-checkerから、壊れたノードが検出されたという報告があります。これには明らかなパターンがなく、メモリ上での書き込み上書き(オーバーライト)の可能性が示唆されています。デバッグの結果、extentバッファの読み込み時にuptodateステータスが見逃される競合状態があることが判明しました。

同じextentバッファに対する並行読み込みを防ぐため、read_extent_buffer_pages()は以下のチェックを実行します:

/* (1) */ if (test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags)) return 0;

/* (2) */ if (test_and_set_bit(EXTENT_BUFFER_READING, &eb->bflags)) goto done;

この時点で、実際の読み込み操作を開始するのは安全です。読み込みが完了すると、end_bbio_meta_read()は以下を実行します:

/* (3) */ set_extent_buffer_uptodate(eb);

/* (4) */ clear_bit(EXTENT_BUFFER_READING, &eb->bflags);

通常、これだけで1つの読み込みのみが実行され、他の呼び出し元は終了するまで待機するため、問題は生じません。残念ながら、以下のような競合的なインターリーブ(交差実行)が発生する可能性があります:

スレッド A | スレッド B | スレッド C ----------+-----------+---------- (1) | | | (1) | (2) | | (3) | | (4) | | | (2) | | | (1)

この状況が発生すると、スレッドBは不要な読み込みを開始してしまいます。さらに悪化するのは、スレッドCはUPTODATEが設定されていることを確認して即座に返却しますが、スレッドBによる読み込みはまだ進行中であるという点です。この競合状態により、extentバッファが並行して変更されることで、以下のようなtree-checkerエラーが発生する可能性があります:

BTRFS critical (device dm-0): corrupted node, root=256 block=8550954455682405139 owner mismatch, have 11858205567642294356 expect [256, 18446744073709551360]

READINGビットを設定した後にUPTODATEを再度テストし、設定されている場合は不要な読み込みをスキップすることで、この問題を修正します。

[ changelogの軽微な更新 ]

Once again VulDB remains the best source for vulnerability data.

モデレーション

承諾済み

エントリ

VDB-264927

EPSS

0.00168

アクティビティ

非常低い

ソース

Do you need the next level of professionalism?

Upgrade your account now!