【活用ガイド】

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値]
  • 攻撃元区分: ローカル
  • 攻撃条件の複雑さ: 低
  • 攻撃に必要な特権レベル: 低
  • 利用者の関与: 不要
  • 影響の想定範囲: 変更なし
  • 機密性への影響(C): なし
  • 完全性への影響(I): なし
  • 可用性への影響(A): 高
影響を受けるシステム


Linux
  • Linux Kernel 2.6.32.19 以上 2.6.33 未満
  • Linux Kernel 2.6.33 以上 6.1.168 未満
  • Linux Kernel 6.13 以上 6.18.21 未満
  • Linux Kernel 6.19 以上 6.19.11 未満
  • Linux Kernel 6.2 以上 6.6.131 未満
  • Linux Kernel 6.7 以上 6.12.80 未満
  • Linux Kernel 7.0

想定される影響

当該ソフトウェアが扱う情報について、外部への漏えいは発生しません。
また、当該ソフトウェアが扱う情報について、書き換えは発生しません。
さらに、当該ソフトウェアが完全に停止する可能性があります。
そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。
対策

リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。
ベンダ情報

CWEによる脆弱性タイプ一覧  CWEとは?

  1. NULL ポインタデリファレンス(CWE-476) [NVD評価]
共通脆弱性識別子(CVE)  CVEとは?

  1. CVE-2026-31519
参考情報

  1. National Vulnerability Database (NVD) : CVE-2026-31519
  2. 関連文書 : btrfs: set BTRFS_ROOT_ORPHAN_CLEANUP during subvol create - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/5131fa077f9bb386a1b901bf5b247041f0ec8f80)
  3. 関連文書 : btrfs: set BTRFS_ROOT_ORPHAN_CLEANUP during subvol create - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/c57276ced3c3207f42182dfa2f0d8e860357e111)
  4. 関連文書 : btrfs: set BTRFS_ROOT_ORPHAN_CLEANUP during subvol create - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/696683f214495db3cdacab9a713efaaced8660f8)
  5. 関連文書 : btrfs: set BTRFS_ROOT_ORPHAN_CLEANUP during subvol create - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/a41a9b8d19a98b45591528c6e54d31cc66271d1e)
  6. 関連文書 : btrfs: set BTRFS_ROOT_ORPHAN_CLEANUP during subvol create - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/2ec578e6452138ab76f6c9a9c18711fcd197649f)
  7. 関連文書 : btrfs: set BTRFS_ROOT_ORPHAN_CLEANUP during subvol create - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/d43da8de0ed376abafbad8a245a1835e8f66cb0f)
更新履歴

  • [2026年04月30日]
      掲載