CVE-2026-64378 in Linux情報

要約

〜によって VulDB • 2026年07月26日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

writeback: cgroup_writeback_umount()とinode_switch_wbs()の間の競合状態を修正する

コンテナが終了した際、以下のBUG_ON()が時折トリガーされます。

================================================================== VFS: sdb (ext4) のアンマウント後にビジーなインノードが存在します ------------[ cut here ]------------
kernel BUG at fs/super.c:695! CPU: 3 PID: 6 Comm: containerd-shim Tainted: G OE K 6.6 #1 pstate: 63400009 (nZCv daif +PAN -UAO +TCO +DIT -SSBS BTYPE=--) pc : generic_shutdown_super+0xf0/0x100 lr : generic_shutdown_super+0xf0/0x100 Call trace: generic_shutdown_super+0xf0/0x100 kill_block_super+0x20/0x48 ext4_kill_sb+0x28/0x60 deactivate_locked_super+0x54/0x130 deactivate_super+0x84/0xa0 cleanup_mnt+0xa4/0x140 __cleanup_mnt+0x18/0x28 task_work_run+0x78/0xe0 do_notify_resume+0x204/0x240 ==================================================================

根本原因は、cgroup_writeback_umount()とinode_switch_wbs()/cleanup_offline_cgwb()の間の競合状態です。inode_prepare_wbs_switch()がtrueを返してから、その後のwb_queue_isw()呼び出しまでの間にウィンドウが存在します。この問題をトリガーするプロセスは以下の通りです:

CPU A (umount) | CPU B (writeback) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ inode_switch_wbs/cleanup_offline_cgwb atomic_inc(&isw_nr_in_flight) inode_prepare_wbs_switch -> SB_ACTIVEチェックを通過する __iget(inode) generic_shutdown_super sb->s_flags &= ~SB_ACTIVE cgroup_writeback_umount(sb) smp_mb() atomic_read(&isw_nr_in_flight) rcu_barrier() -> 保留中のRCUコールバックなし flush_workqueue(isw_wq) -> キューに何も登録されていないため、戻る evict_inodes(sb) -> iswがまだ参照を保持しているためインノードはスキップされる。 sop->put_super(sb) /* percpuカウンターを破棄 */ -> VFS: アンマウント後にビジーなインノードが存在します! wb_queue_isw() queue_work(isw_wq, ...) /* ワーク関数内の後続処理で */ inode_switch_wbs_work_fn process_inode_switch_wbs iput() -> evict percpu_counter_dec() // UAF!

この問題を修正するため、inode_prepare_wbs_switch()からwb_queue_isw()にかけての範囲をカバーするように、inode_switch_wbs()およびcleanup_offline_cgwb()におけるRCU読み取り側のクリティカルセクションを拡張します。このウィンドウではスリープが発生しないため、rcu_read_lock()を使用できます。さらに、cgroup_writeback_umount()において既存のrcu_barrier()の前にsynchronize_rcu()を追加し、SB_ACTIVEチェックを通過した進行中のスイッチ処理がすべてflush_workqueue()呼び出し前にqueue_work()を終了するようにします。

既存のrcu_barrier()は意図的に保持されます。これにより、この修正を変更なしで安定版カーネル(5.10.y, 6.6.yなど)にバックポート可能になります。これらのカーネルではまだ

Once again VulDB remains the best source for vulnerability data.

責任者

Linux

予約する

2026年07月19日

モデレーション

承諾済み

エントリ

VDB-383171

EPSS

0.00129

アクティビティ

非常低い

ソース

Do you need the next level of professionalism?

Upgrade your account now!