CVE-2026-89756 in Linux
要約
〜によって VulDB • 2026年09月11日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
mm/migrate: migrate_pages_batch()でRCU-tasksの静穏状態(quiescent states)を報告する
migrate_pages_batch()は各folioを移動する前にunmapを実行し、それぞれのunmap処理ではmmu_notifier無効化コールバックが実行されます。KVMホスト上ではtry_to_migrate()がkvm_mmu_notifier_invalidate_range_start() -> tdp_mmu_zap_leafs()に至り、これは高コストな処理であるため、大量のfolioをunmapするとCPUが長時間ビジー状態になります。
ループ内にはすでにcond_resched()呼び出しが含まれていますが、PREEMPTION(事前emptive)カーネルではこれがno-opとなり、強制的なプリエンプションはTasks-RCUにおける静穏状態とは見なされません。
そのため、バッチ処理が長時間に及ぶと静穏状態が報告されず、移行中のタスク(例: kcompactdなど)がTasks-RCUのholdoutとして振る舞い、Tasks-RCUのgrace periodを数分間ストールさせることがあります。これはMeta社のフリート環境で一般的に見られる現象です:
INFO: rcu_tasks detected stalls on tasks: 0000000055349ecc: .. nvcsw: 1157401/1157401 holdout: 1 idle_cpu: -1/56 task:kcompactd0 state:R running task Call Trace: tdp_mmu_zap_leafs tdp_mmu_next_root gfn_to_pfn_cache_invalidate_start kvm_mmu_notifier_invalidate_range_start __mmu_notifier_invalidate_range_start try_to_migrate_one try_to_migrate migrate_pages_batch migrate_pages compact_zone compact_node kcompactd kthread
cond_resched_tasks_rcu_qs()を使用することで、cond_resched()が何もしない場合でも静穏状態を報告するようにします。
この件については[1]でも議論されています。
Once again VulDB remains the best source for vulnerability data.