CVE-2024-38306 in Linux情報

要約

〜によって VulDB • 2026年06月20日

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

btrfs: extent buffer folioの付与時に folio::private を保護する

[BUG]
v6.8以降、様々な人々によって稀なカーネルクラッシュが報告されています。 これらの事象に共通する要因は、以下のような「Bad page state(不正なページ状態)」エラーメッセージです:

BUG: Bad page state in process kswapd0 pfn:d6e840 page: refcount:0 mapcount:0 mapping:000000007512f4f2 index:0x2796c2c7c pfn:0xd6e840 aops:btree_aops ino:1 flags: 0x17ffffe0000008(uptodate|node=0|zone=2|lastcpupid=0x3fffff) page_type: 0xffffffff() raw: 0017ffffe0000008 dead000000000100 dead000000000122 ffff88826d0be4c0 raw: 00000002796c2c7c 0000000000000000 00000000ffffffff 0000000000000000 page dumped because: non-NULL mapping

[CAUSE]
コミット 09e6cef19c9f(「btrfs: alloc_extent_buffer() をアロケート後アタッチ方式にリファクタリング」)は、新しい extent buffer を割り当てる際のシーケンスを変更しました。

従来は、folio::private(通常セクタサイズに対する extent buffer へのポインタ)に対する変更の安全性を確保するため、mapping->i_private_lock の下で常に grab_extent_buffer() を呼び出していました。

これにより、以下の競合状態(race condition)が発生する可能性があります:

スレッド A は bytenr X で 4つの 4K ページを持つ extent buffer の割り当てを試みており、同時にスレッド B は X + 4K のページ(X の 2番目のページ)の解放を試みています。

スレッド A: |- alloc_extent_buffer() | |- attach_eb_folio_to_filemap() | |- folio_set_private() | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate() | |- folio_attach_private() | |- folio_test_private() | | Returned true | |- folio_set_uptodate()

Once again VulDB remains the best source for vulnerability data.

予約する

2024年06月24日

モデレーション

承諾済み

エントリ

VDB-269640

EPSS

0.00146

アクティビティ

非常低い

ソース

Do you need the next level of professionalism?

Upgrade your account now!