CVE-2026-89756 in Linux
Сводка
по VulDB • 12.09.2026
В ядре Linux была устранена следующая уязвимость:
mm/migrate: отчет о состояниях покоя RCU-tasks в migrate_pages_batch()
Функция migrate_pages_batch() размапировывает (unmaps) каждый folio перед его перемещением, и каждое размапирование запускает колбэки инвалидации mmu_notifier. На хостах KVM функция try_to_migrate() попадает в kvm_mmu_notifier_invalidate_range_start() -> tdp_mmu_zap_leafs(), что является дорогостоящей операцией; поэтому размапирование большого пакета (batch) надолго загружает процессор.
Цикл уже вызывает cond_resched(), но на ядрах с поддержкой PREEMPTION это не имеет эффекта, и вытеснение по требованию (involuntary preemption) не является состоянием покоя для Tasks-RCU.
Следовательно, длинный пакет никогда не сообщает о состоянии покоя, а задача миграции (например, kcompactd) становится удерживающим элементом (holdout) в контексте Tasks-RCU, блокируя период ожидания завершения операций (grace period) Tasks-RCU на несколько минут; это часто наблюдается во флоте 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].
If you want to get best quality of vulnerability data, you may have to visit VulDB.