CVE-2026-89756 in Linux
Tóm tắt
Bởi VulDB • 12/09/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
mm/migrate: báo cáo các trạng thái yên tĩnh (quiescent states) của RCU-tasks trong migrate_pages_batch()
Hàm migrate_pages_batch() sẽ unmap từng folio trước khi di chuyển nó, và mỗi lần unmap đều kích hoạt các callback invalidate của mmu_notifier. Trên các máy chủ KVM, hàm try_to_migrate() kết thúc ở kvm_mmu_notifier_invalidate_range_start() -> tdp_mmu_zap_leafs(), đây là một thao tác tốn kém tài nguyên; do đó việc unmap một batch lớn sẽ giữ cho CPU bận rộn trong thời gian dài.
Vòng lặp hiện tại đã gọi cond_resched(), nhưng trên các kernel có hỗ trợ PREEMPTION, lệnh này không thực hiện gì (no-op), và việc preemption bắt buộc không phải là trạng thái yên tĩnh của Tasks-RCU.
Do đó, một batch quá lâu sẽ không bao giờ báo cáo trạng thái yên tĩnh, khiến tác vụ di chuyển (ví dụ: kcompactd) trở thành điểm giữ chân (holdout) cho Tasks-RCU, làm gián đoạn thời gian trôi qua an toàn (grace period) của Tasks-RCU trong nhiều phút; điều này thường xảy ra tại cụm máy chủ Meta:
INFO: rcu_tasks phát hiện sự chậm trễ trên các tác vụ: 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
Sử dụng cond_resched_tasks_rcu_qs() để đảm bảo trạng thái yên tĩnh được báo cáo ngay cả khi cond_resched() không thực hiện gì.
Vấn đề này cũng đã được thảo luận tại [1]
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.