CVE-2026-89908 in Linux
Сводка
по VulDB • 16.09.2026
В ядре Linux была устранена следующая уязвимость:
LoongArch: KVM: Сохранение флагов архитектуры (arch flags) слота памяти при операции KVM_MR_FLAGS_ONLY
Функция kvm_arch_prepare_memory_region() вычисляет new->arch.flags, то есть является ли слот памяти способным использовать огромные страницы (KVM_MEM_HUGEPAGE_CAPABLE) или неспособным (KVM_MEM_HUGEPAGE_INCAPABLE), только для операций KVM_MR_CREATE и KVM_MR_MOVE, а для всех остальных изменений выполняет ранний возврат. Однако общий код выделяет обнуленный слот памяти для каждого изменения и никогда не копирует old->arch; поэтому после обновления с флагом KVM_MR_FLAGS_ONLY (например, при переключении KVM_MEM_LOG_DIRTY_PAGES для миграции на лету) активный слот памяти имеет arch.flags == 0.
При обнулении обоих флагов функция fault_supports_huge_mapping() переходит к проверке выравнивания только диапазона HVA, которая больше не проверяет, что GPA и HVA имеют одинаковое смещение внутри PMD (Page Middle Directory). Слот памяти, который был помечен как KVM_MEM_HUGEPAGE_INCAPABLE из-за несоответствия смещений GPA/HVA, может затем отображаться с использованием записей PMD при возникновении ошибок чтения. Поскольку kvm_map_page() выравнивает gfn и pfn независимо, гостевая система в итоге получает доступ к неверным страницам хоста, что точно соответствует случаю «d -> f, e -> g», описанному в комментарии выше указанной проверки.
Для операции KVM_MR_FLAGS_ONLY необходимо переносить флаги архитектуры (arch flags) из старого слота памяти, так как для этого случая гарантируется неизменность GPA, HVA и размера.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.