JVNDB-2026-014762 | |
LinuxのLinux Kernelにおける到達可能なアサーションに関する脆弱性 | |
| 概要 | |
Linuxカーネルにおいて、以下の脆弱性が修正されました。btrfsのdrop_progressが非ゼロでdrop_levelがゼロのroot itemsを拒否します。マウント時のリロケーション復旧処理では、merge_reloc_root()とbtrfs_drop_snapshot()の両方がBUG_ON(level == 0)を使用して、root_item内でdrop_progressが非ゼロかつdrop_levelがゼロというありえない状態が発生しないように防止しています。この状態は以下のようにトリガーされる可能性があります。------------[ここから切り取り]------------kernel BUG at fs/btrfs/relocation.c:1545!Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTICPU: 1 UID: 0 PID: 283 ... Tainted: 6.18.0+ #16 PREEMPT(voluntary)Tainted: [O]=OOT_MODULE, [E]=UNSIGNED_MODULEHardware name: QEMU Ubuntu 24.04 PC v2, BIOS 1.16.3-debian-1.16.3-2RIP: 0010:merge_reloc_root+0x1266/0x1650 fs/btrfs/relocation.c:1545Code: ffff0000 00004589 d7e9acfa ffffe8a1 79bafebe 02000000Call Trace: merge_reloc_roots+0x295/0x890 fs/btrfs/relocation.c:1861 btrfs_recover_relocation+0xd6e/0x11d0 fs/btrfs/relocation.c:4195 btrfs_start_pre_rw_mount+0xa4d/0x1810 fs/btrfs/disk-io.c:3130 open_ctree+0x5824/0x5fe0 fs/btrfs/disk-io.c:3640 btrfs_fill_super fs/btrfs/super.c:987 [inline] btrfs_get_tree_super fs/btrfs/super.c:1951 [inline] btrfs_get_tree_subvol fs/btrfs/super.c:2094 [inline] btrfs_get_tree+0x111c/0x2190 fs/btrfs/super.c:2128 vfs_get_tree+0x9a/0x370 fs/super.c:1758 fc_mount fs/namespace.c:1199 [inline] do_new_mount_fc fs/namespace.c:3642 [inline] do_new_mount fs/namespace.c:3718 [inline] path_mount+0x5b8/0x1ea0 fs/namespace.c:4028 do_mount fs/namespace.c:4041 [inline] __do_sys_mount fs/namespace.c:4229 [inline] __se_sys_mount fs/namespace.c:4206 [inline] __x64_sys_mount+0x282/0x320 fs/namespace.c:4206 ...RIP: 0033:0x7f969c9a8fdeCode: 0f1f4000 48c7c2b0 fffffff7 d8648902 b8ffffff ffc3660f---[ end trace 0000000000000000 ]---このバグは、我々の動的メタデータファジングツールを使用した7.0.0-rc2-next-20260310環境で再現可能であり、実行時にbtrfsメタデータを破損させます。[原因]drop_progress.objectidが非ゼロの場合、btrfs_drop_snapshot()が中断されてディスク上に再開ポイントが残っていることを意味し、その場合はdrop_levelが0より大きくなければなりません。なぜなら、チェックポイントは内部ノードレベルでのみ保存されるためです。この不変条件はカーネルがroot itemを書き込む際に適用されますが、root itemをディスクから読み込む際には検証されません。そのため、ディスク上の破損によりdrop_progress.objectidが非ゼロかつdrop_levelがゼロという不正な状態が発生します。リロケーション復旧処理がこのようなroot itemを処理するとき、merge_reloc_root()がdrop_levelを読み取りBUG_ON(level == 0)をトリガーします。同じ不正なメタデータはbtrfs_drop_snapshot()内の対応するBUG_ON()も引き起こします。[修正]root itemsをディスクから読み込む際にtree-checkerでroot_itemの不変条件を検証し、drop_progress.objectidが非ゼロの場合はdrop_levelも非ゼロであることを確認するよう修正しました。そのような不正なメタデータはmerge_reloc_root()やbtrfs_drop_snapshot()に到達してBUG_ONを引き起こす前に-EUCLEANで拒否されます。修正後は同じ破損がtree-checkerにより正しく拒否され、BUG_ONは発生しなくなりました。 | |
| CVSS による深刻度 (CVSS とは?) | |
|
CVSS v3 による深刻度
基本値: 5.5 (警告) [NVD値]
| |
| 影響を受けるシステム | |
|
| |
Linux | |
|
| |
| 想定される影響 | |
当該ソフトウェアが扱う情報について、外部への漏えいは発生しません。 | |
| 対策 | |
リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 | |
| ベンダ情報 | |
|
| |
| CWEによる脆弱性タイプ一覧 CWEとは? | |
| |
| 共通脆弱性識別子(CVE) CVEとは? | |
|
| |
| 参考情報 | |
| |
| 更新履歴 | |
|
| 公表日 | 2026/05/01 |
| 登録日 | 2026/05/11 |
| 最終更新日 | 2026/05/11 |



