| タイトル | 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は発生しなくなりました。 |
| 想定される影響 | 当該ソフトウェアが扱う情報について、外部への漏えいは発生しません。 また、当該ソフトウェアが扱う情報について、書き換えは発生しません。 さらに、当該ソフトウェアが完全に停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 |
| 対策 | リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 |
| 公表日 | 2026年5月1日0:00 |
| 登録日 | 2026年5月11日10:57 |
| 最終更新日 | 2026年5月11日10:57 |
| CVSS3.0 : 警告 | |
| スコア | 5.5 |
|---|---|
| ベクター | CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H |
| Linux |
| Linux Kernel 2.6.29 以上 5.15.203 未満 |
| Linux Kernel 5.16 以上 6.1.168 未満 |
| Linux Kernel 6.13 以上 6.18.22 未満 |
| Linux Kernel 6.19 以上 6.19.12 未満 |
| Linux Kernel 6.2 以上 6.6.134 未満 |
| Linux Kernel 6.7 以上 6.12.81 未満 |
| Linux Kernel 7.0 |
| No | 変更内容 | 変更日 |
|---|---|---|
| 1 | [2026年05月11日] 掲載 |
2026年5月11日10:57 |
| 概要 | In the Linux kernel, the following vulnerability has been resolved: btrfs: reject root items with drop_progress and zero drop_level [BUG] ------------[ cut here ]------------ The bug is reproducible on 7.0.0-rc2-next-20260310 with our dynamic [CAUSE] Although this invariant is enforced when the kernel writes the root When relocation recovery later processes such a root item, [FIX] After the fix, the same corruption is correctly rejected by tree-checker |
|---|---|
| 公表日 | 2026年5月2日0:16 |
| 登録日 | 2026年5月2日4:07 |
| 最終更新日 | 2026年5月8日22:52 |
| 構成1 | 以上 | 以下 | より上 | 未満 | |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 2.6.29 | 5.15.203 | |||
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.16 | 6.1.168 | |||
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 | 6.6.134 | |||
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 | 6.12.81 | |||
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.13 | 6.18.22 | |||
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.19 | 6.19.12 | |||
| cpe:2.3:o:linux:linux_kernel:7.0:rc1:*:*:*:*:*:* | |||||
| cpe:2.3:o:linux:linux_kernel:7.0:rc2:*:*:*:*:*:* | |||||
| cpe:2.3:o:linux:linux_kernel:7.0:rc3:*:*:*:*:*:* | |||||
| cpe:2.3:o:linux:linux_kernel:7.0:rc4:*:*:*:*:*:* | |||||