JVNDB-2026-007879 | |
LinuxのLinux Kernelにおけるリソースのロックに関する脆弱性 | |
| 概要 | |
Linuxカーネルにおいて以下の脆弱性が修正されました。btrfsのメタデータのwritepages時にダーティメタデータ閾値を厳密に要求しない問題がありました。balance_dirty_pages()のio_schedule_timeout()で1000以上のプロセスが待機し、システムハングおよびカーネルコアダンプを引き起こしたという内部報告があります。カーネルはv6.4ベースですが、根本的な問題はv6.18以前のすべての上流カーネルに該当します。原因はJan Karaによるダーティページのバランス動作に関する知見に基づき、このcgroupのダーティリミットが実質的な問題の原因でした。そのcgroupはメモリが少なく、ダーティリミットは約16MBに設定されていました。ダーティスロットリングは誰もダーティリミット以上のダーティメモリを作らないように強制するため、タスクがページをダーティ化すると、periodically balance_dirty_pages()に入り、ダーティ化を遅らせるためにそこでスリープします。システムが既にダーティリミットを超えている場合(グローバルまたは実行中のタスクのcgroup内)、ダーティページ数がリミット以下になるまでタスクはbalance_dirty_pages()から抜けられません。今回のケースではcgroupがメモリ少なく、ダーティリミットは16MBに設定されていました。cgroupのタスクがbtrfsのbtree inode内で約28MB分のページをダーティ化しており、それが事実上そのcgroup内の唯一のダーティページでした。つまり、そのcgroupのダーティページを減らす唯一の方法はbtrfs btree inodeのダーティページを書き戻すことでした。そしてそれが完了した後に初めてプロセスはbalance_dirty_pages()から抜けられます。btrfsの部分に戻ると、btree_writepages()はダーティなbtree inodeページの書き戻しを担当しています。問題は、btree inodeのダーティバイト数が32MBの内部閾値以下の場合は書き戻しを行わない内部閾値が存在することです。この動作はできるだけ多くのメタデータをバッチ処理し、書き戻したツリーブロックを再度COWするのを防ぐためのものでした。この32MiBの内部閾値は既存の28MiBのダーティページサイズより大きいため、書き戻しが発生せず、btrfsとcgroup間でデッドロックが発生しました。具体的には、btrfsはより多くのダーティページになるまでbtree inodeを書き戻さず、cgroup/MMはbtrfs btree inodeのダーティページの増加を許さないため、btree inodeにアクセスするプロセスはダーティページ数が減るまでスリープ状態になります。根本原因の解析に対しJan Karaに感謝します。改善策として、カーネルコミットb55102826d7d("btrfs: set AS_KERNEL_FILE on the btree_inode")以降、btrfs btree inodeページはroot cgroupにのみ計上され、このcgroupはbtrfsの32MiB閾値より大幅に大きなリミットを持つため、最新カーネルには影響がありません。しかし、現行のLTSカーネルはすべてこの問題の影響を受けており、AS_KERNEL_FILEの全体的なバックポートは適切でない可能性があります。新しいカーネルでもbtrfsの固定閾値よりもcgroup/MMのシステム全体のメモリ使用状況管理の方が優れているケースが多いため、btree_writepages()の内部閾値を廃止することが望ましいです。btrfs_btree_balance_dirty()内の内部呼び出しはすでに内部閾値チェックを行っているため影響はありませんが、btree_writepages()の外部呼び出しに対しては、内部btrfs閾値を無視して要求に応じて書き戻しを行い、btree inodeのダーティページバランシング時のデッドロックを回避します。 | |
| CVSS による深刻度 (CVSS とは?) | |
|
CVSS v3 による深刻度
基本値: 5.5 (警告) [NVD値]
| |
| 影響を受けるシステム | |
|
| |
Linux | |
|
| |
| 想定される影響 | |
当該ソフトウェアが扱う情報について、外部への漏えいは発生しません。 | |
| 対策 | |
リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 | |
| ベンダ情報 | |
|
| |
| CWEによる脆弱性タイプ一覧 CWEとは? | |
| |
| 共通脆弱性識別子(CVE) CVEとは? | |
|
| |
| 参考情報 | |
| |
| 更新履歴 | |
|
| 公表日 | 2026/02/14 |
| 登録日 | 2026/03/19 |
| 最終更新日 | 2026/03/19 |



