【活用ガイド】

JVNDB-2025-026155

LinuxのLinux Kernelにおける不特定の脆弱性

概要

Linuxカーネルにおいて、以下の脆弱性が修正されました。btrfs: btrfs_clear_space_info_full()における競合するビットフィールド書き込みの問題を修正しました。memory-barriers.txtドキュメントにあるメモリバリアの順序保証について説明します。これらの保証はビットフィールドには適用されません。なぜなら、コンパイラはこれらを非原子的な読み取り-修正-書き込みシーケンスで変更するコードを生成することが多いためです。そのため、ビットフィールドを使用して並列アルゴリズムの同期を試みてはいけません。たとえビットフィールドがロックで保護されていても、与えられたビットフィールド内のすべてのフィールドは1つのロックで保護する必要があります。もしビットフィールド内の2つのフィールドが異なるロックで保護されている場合、コンパイラの非原子的な読み取り-修正-書き込みシーケンスのため、1つのフィールドの更新が隣接フィールドの値を破損させる可能性があります。btrfs_space_infoは基になるワードを共有するビットフィールドを持ち、full、chunk_alloc、flushの各フィールドで構成されています。したがって、ロックで保護されたビットフィールドメンバーへの並列読み取り-修正-書き込みによる書き込みの損失を防ぐため、すべてのビットフィールドへの書き込みにロックを使用する必要があります。ほとんどの場合これが守られていますが、btrfs_clear_space_info_full()だけがロックなしでspace_infosを走査しfound-full = 0を書き込んでいました。例として、あるスレッドがブロックグループの削除を完了しbtrfs_clear_space_info_full()を呼び出している一方で、データリクレイムチケットインフラがdo_async_reclaim_data_space()を実行している場合を想定します。T1(btrfs_commit_transaction)でbtrfs_clear_space_info_fullがfullを0に設定し、T2(do_async_reclaim_data_space)でロック取得後flushを0に書き換える処理が競合します。その結果、data_sinfo-flushが1のままリクレイムワーカーは終了し、flushが0なら作業がなければならないという不変条件が破られます。この不変条件が破れると、__reserve_bytes()で将来の割り当てがspace_info-ticketsにチケットを追加してもflushが1のままなので作業キューを生成せず、その後永遠にチケットでブロックされワーカーを再起動できなくなります。影響を受けるカーネルのアセンブリを調査したところ、flushビット(3番目のビット)を0にセットするためにandb命令が使われ、fullビット(1番目のビット)を0にする場合も同様の読み取り-修正-書き込み操作が行われているため、実際のシステム上で問題となるバグであると判断しています。現在この状態のシステムはいくつか観測されていますが、再現は困難です。今後の問題を防ぐため、構造体に余裕があることから3つのビットフィールドメンバーをbool型に変更し対応しました。これにより、space_info-fullへの書き込みが他のビットの値に影響を与えることを防ぎます。
CVSS による深刻度 (CVSS とは?)

CVSS v3 による深刻度
基本値: 5.5 (警告) [NVD値]
  • 攻撃元区分: ローカル
  • 攻撃条件の複雑さ: 低
  • 攻撃に必要な特権レベル: 低
  • 利用者の関与: 不要
  • 影響の想定範囲: 変更なし
  • 機密性への影響(C): なし
  • 完全性への影響(I): なし
  • 可用性への影響(A): 高
影響を受けるシステム


Linux
  • Linux Kernel 4.8 以上 5.15.201 未満
  • Linux Kernel 5.16 以上 6.1.164 未満
  • Linux Kernel 6.13 以上 6.17.13 未満
  • Linux Kernel 6.18 以上 6.18.2 未満
  • Linux Kernel 6.2 以上 6.6.124 未満
  • Linux Kernel 6.7 以上 6.12.68 未満

想定される影響

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

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

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

  1. 情報不足(CWE-noinfo) [NVD評価]
共通脆弱性識別子(CVE)  CVEとは?

  1. CVE-2025-68358
参考情報

  1. National Vulnerability Database (NVD) : CVE-2025-68358
  2. 関連文書 : btrfs: fix racy bitfield write in btrfs_clear_space_info_full() - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/55835646da78e83e7ad06abd741ca8fd8c0b0ea7)
  3. 関連文書 : btrfs: fix racy bitfield write in btrfs_clear_space_info_full() - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/b0bb67385480a3aa4c54b139e4f371ddd06b5150)
  4. 関連文書 : btrfs: fix racy bitfield write in btrfs_clear_space_info_full() - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/6f442808a86eef847ee10afa9e6459494ed85bb3)
  5. 関連文書 : btrfs: fix racy bitfield write in btrfs_clear_space_info_full() - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/742b90eaf394f0018352c0e10dc89763b2dd5267)
  6. 関連文書 : btrfs: fix racy bitfield write in btrfs_clear_space_info_full() - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/38e818718c5e04961eea0fa8feff3f100ce40408)
  7. 関連文書 : btrfs: fix racy bitfield write in btrfs_clear_space_info_full() - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/d4a81b8ec639895999275ea2472c69825cd67ea4)
  8. 関連文書 : btrfs: fix racy bitfield write in btrfs_clear_space_info_full() - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/db4ae18e1b31e0421fb5312e56aefa382bbc6ece)
更新履歴

  • [2026年03月02日]
      掲載