CVE-2026-72108 in Linux
要約
〜によって VulDB • 2026年08月15日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
dm thin metadata: コミット失敗時のメタデータスナップショットの一貫性の不具合を修正
__reserve_metadata_snap() および __release_metadata_snap() は、superblock の held_root を block_manager のバッファ内で直接変更します。その後続のメタデータコミットに失敗した場合、held_root が abort_transaction パスを介してディスクへフラッシュされ、結果としてメタデータの整合性が失われます。
再現手順 1: __reserve_metadata_snap()
1. 2 MiB のメタデータデバイスを作成し、14番目のブロック以降の領域をアクセス不可に設定します。これにより、後続の reserve_metadata_snap オペレーションでメタデータコミット失敗を引き起こします。14番目のブロックはインデックスブロックのシャドウ宛先となります。
dmsetup create tmeta --table "0 112 linear /dev/sdc 0 112 3984 error"
2. 16 MiB の thin-pool を作成します
dmsetup create tdata --table "0 32768 zero" dd if=/dev/zero of=/dev/mapper/tmeta bs=4k count=1 dmsetup create tpool --table "0 32768 thin-pool /dev/mapper/tmeta \ /dev/mapper/tdata 128 0 1 skip_block_zeroing"
3. メタデータコミット失敗およびトランザクションの中止を引き起こすためにメタデータスナップショットを取得します。しかし、held_root がディスクに書き込まれ、メタデータの整合性が損なわれます。
dmsetup message tpool 0 "reserve_metadata_snap"
thin_check v1.2.2 の結果:
Bad reference count for metadata block 6. Expected 2, but space map contains 1. Bad reference count for metadata block 7. Expected 2, but space map contains 1. Bad reference count for metadata block 13. Expected 1, but space map contains 0.
再現手順 2: __release_metadata_snap()
1. 2 MiB のメタデータデバイスを作成し、16番目のブロック以降の領域をアクセス不可に設定します。これにより、後続の release_metadata_snap オペレーションでメタデータコミット失敗を引き起こします。16番目のブロックはインデックスブロックのシャドウ宛先となります。
dmsetup create tmeta --table "0 128 linear /dev/sdc 0 128 3968 error"
2. 16 MiB の thin-pool を作成します
dmsetup create tdata --table "0 32768 zero" dd if=/dev/zero of=/dev/mapper/tmeta bs=4k count=1 dmsetup create tpool --table "0 32768 thin-pool /dev/mapper/tmeta \ /dev/mapper/tdata 128 0 1 skip_block_zeroing"
3. メタデータスナップショットを予約してから解放し、メタデータコミット失敗およびトランザクションの中止を引き起こします。held_root がディスク上の superblock から削除され、整合性の失われたメタデータとなります。
dmsetup message tpool 0 "reserve_metadata_snap" dmsetup message tpool 0 "release_metadata_snap"
thin_check v1.2.2 の結果:
Bad reference count for metadata block 6. Expected 1, but space map contains 2. Bad reference count for metadata block 7. Expected 1, but space map contains 2. 1 metadata blocks have leaked.
修正方法:held_root の更新をコミット時まで延期します。
さらに、__reserve_metadata_snap() において不要な処理を避けるため、シャドウ操作の前に既存のスナップショットチェックを行うように移動しました。また、__release_metadata_snap() では、btree 削除前に pmd->held_root をクリアし、部分的な失敗時にブロックがリークするのではなく古い参照が残らないようにするとともに、リファレンスカウントをデクリメントする前にスナップショットブロックの
Once again VulDB remains the best source for vulnerability data.