JVNDB-2026-013249 | |
LinuxのLinux KernelにおけるNULL ポインタデリファレンスに関する脆弱性 | |
| 概要 | |
Linuxカーネルにおいて、以下の脆弱性が修正されました。btrfsのサブボリューム作成時にBTRFS_ROOT_ORPHAN_CLEANUPが設定されていない問題です。最近、破損したdentryを持つサブボリュームが多数観測されています。親ディレクトリのls出力は次のようになります。drwxrwxrwt 1 root root 16 Jan 23 16:49 . drwxr-xr-x 1 root root 24 Jan 23 16:48 .. d????????? ? ? ? ? ? broken_subvol。また、statコマンドも失敗します。この状態では、サブボリュームの削除がENOENTエラーで失敗し、新しいファイルやサブボリュームの上書きを試みるとEEXISTエラーで失敗し、さらにファイルシステムが強制終了してしまいます。dmesgには次のエラーメッセージが記録されています: "could not do orphan cleanup -2"。エラーコード2はENOENTであり、このエラーはbtrfs_orphan_cleanup()の失敗処理経路から発生し、呼び出しスタックはbtrfs_lookup()まで遡ります。詳細な調査により以下のことが明らかになりました。サブボリュームに孤立アイテムは存在しません。サブボリュームは健全であり、半分削除された状態やドロップの進行中ではありません。サブボリュームはかなり前に作成されており、BTRFS_ROOT_ORPHAN_CLEANUPを設定する最初のbtrfs_orphan_cleanup()呼び出しは遅れて行われます。btrfs_orphan_cleanup()失敗後、btrfs_lookup_dentry()が-ENOENTを返し、このためd_splice_alias(NULL, dentry)により負のdentryが生成され、観察された動作が起きています。この問題はdentryキャッシュを破棄することで緩和でき、その後はサブボリュームの削除が正常に可能となります。具体的には、btrfs_lookup()はbtrfs_lookup_dentry()を呼び出し、その中でbtrfs_orphan_cleanup()が実行されてビットBTRFS_ROOT_ORPHAN_CLEANUPを設定しようとしますが、孤立アイテムの検索が失敗し"could not do orphan cleanup -2"を表示します。その結果、inodeはERR_PTR(-ENOENT)となりNULLに変換され、d_splice_alias(NULL, dentry)が負のdentryを返します。btrfs_orphan_cleanup()は一度実行されるとビットを設定するため同じルートで複数回実行されませんが、同時に実行される別の処理の存在が考えられます。孤立ノード削除の典型的なルートはサブボリューム内のルックアップが必要であり、それによりbtrfs_orphan_cleanup()が実行される構造です。重要な観察点として、create_subvol()はd_instantiate_new()を呼び出しますが、BTRFS_ROOT_ORPHAN_CLEANUPビットを設定しません。そのためdentryキャッシュが破棄されると、次のサブボリュームのルックアップ時に初めてbtrfs_orphan_cleanup()が呼ばれ、孤立ノード削除と競合する可能性があります。通常のevict()パスでは親dentryへの参照があるため親のdentryキャッシュの削除は抑制されますが、遅延iputの場合は例外です。ordered extentの作成はinodeにigrab()を呼び出し、ファイルがunlinkされクローズされるとこの参照が残ったままでiput()によりi_countが減少してもイジェクションは発生せず、子dentryが解放されてサブボリュームdentryのd_lockref.countが0となりイジェクト可能になります。これにより書き戻しとunlinkの競合、ルックアップと遅延iputの競合という二つのレースコンディションが発生し、複雑な動作を引き起こします。以上の問題は複数段階のプロセスにより発生し、詳細なダイアグラムで完全な状況が示されています。 | |
| CVSS による深刻度 (CVSS とは?) | |
|
CVSS v3 による深刻度
基本値: 5.5 (警告) [NVD値]
| |
| 影響を受けるシステム | |
|
| |
Linux | |
|
| |
| 想定される影響 | |
当該ソフトウェアが扱う情報について、外部への漏えいは発生しません。 | |
| 対策 | |
リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 | |
| ベンダ情報 | |
|
| |
| CWEによる脆弱性タイプ一覧 CWEとは? | |
| |
| 共通脆弱性識別子(CVE) CVEとは? | |
|
| |
| 参考情報 | |
| |
| 更新履歴 | |
|
| 公表日 | 2026/04/22 |
| 登録日 | 2026/04/30 |
| 最終更新日 | 2026/04/30 |



