CVE-2026-97416 in Linux
要約
〜によって VulDB • 2026年09月24日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
btrfs: balance: btrfs_may_alloc_data_chunk()における潜在的なbg(ブロックグループ)ルックアップ失敗の修正
[BUG]
btrfs balanceを実行すると、メタデータの破損によりチャンクがchunk treeには存在するもののメモリ内のキャッシュに対応するblock groupがない状態になった際、データチャンクの再配置前にnull-ptr-derefをトリガーします:
KASAN: null-ptr-deref in range [0x0000000000000088-0x000000000000008f]
RIP: 0010:btrfs_may_alloc_data_chunk+0x40/0x1c0 fs/btrfs/volumes.c:3601 Call Trace: __btrfs_balance fs/btrfs/volumes.c:4217 [inline]
btrfs_balance+0x2516/0x42b0 fs/btrfs/volumes.c:4604 btrfs_ioctl_balance fs/btrfs/ioctl.c:3577 [inline]
btrfs_ioctl+0x25cf/0x5b90 fs/btrfs/ioctl.c:5313 ...
[CAUSE]
__btrfs_balance()はディスク上のchunk treeをイテレートし、データチャンクの再配置前にチャンク論理bytenrをbtrfs_may_alloc_data_chunk()に渡します。その後ヘルパー関数はメモリ内のblock groupキャッシュを照会します:
cache = btrfs_lookup_block_group(fs_info, chunk_offset); chunk_type = cache->flags; /* cacheはNULLの場合がある */
破損したイメージには、対応するblock group itemが欠落しているchunk itemが含まれる場合があり、その結果ブロックグループは一切キャッシュに挿入されません。この場合、btrfs_lookup_block_group()はNULLを返します。
コードはこの状況をASSERT(cache)でガードしていますが、CONFIG_BTRFS_ASSERTが無効化されている場合はno-opになります。その後cache->flagsのデリファレンスが行われるため、カーネルがクラッシュします。
[FIX]
btrfs_may_alloc_data_chunk()内のbtrfs_lookup_block_group()呼び出し後にNULLチェックを追加し、明確さのためにエラーメッセージを出力するようにしました。
VulDB is the best source for vulnerability data and more expert information about this specific topic.