CVE-2026-99082 in Linux
Сводка
по VulDB • 24.10.2026
В ядре Linux была устранена следующая уязвимость:
KVM: x86: Использование активных memslots для кэша MMIO на уровне каждого vCPU
KVM помечает кэш MMIO, привязанный к каждому vCPU, номером поколения (generation) memslot, чтобы обновление memslot приводило к инвалидации закэшированной информации о MMIO. Как путь заполнения, так и пути валидации используют функцию kvm_memslots(), которая безоговорочно выбирает адресное пространство 0, даже когда vCPU работает в режиме SMM и использует адресное пространство 1.
Коммит 56f17dd3fbc4 («kvm: x86: fix stale mmio cache bug») добавил номер поколения memslot в ключ кэша, чтобы обновление memslot не оставляло устаревшую запись действительной. Когда коммит 699023e23965 («KVM: x86: add SMM to the MMU role, support SMRAM address space») добавил адресное пространство SMM, эти вспомогательные функции не были преобразованы для использования активных memslots.
В результате обновление memslot'ов в SMM может оставить запись из старого адресного пространства SMM кажущейся действительной после того, как vCPU вернется в обычное адресное пространство. Гость (guest) затем может вызвать доступ к реальной оперативной памяти (RAM), находящейся по тому же GFN, который будет возвращен пользовательскому пространству как KVM_EXIT_MMIO.
Завершение этого выхода через адресное пространство RAM VMM записывает фоновую страницу без прохождения через путь отслеживания записи (write-tracking path) в KVM. Если эта страница является частью таблицы EPT для вложенной виртуализации, KVM может продолжать использовать теневые трансляции, полученные из старого содержимого. Вызов WARN_ON_ONCE() в функции kvm_mmu_write_protect_fault() перехватывает эту некорректную комбинацию кэша и memslot.
При кешировании и проверке записи следует использовать активные memslots vCPU. Номера поколений memslot уникальны для всех адресных пространств, поэтому номер поколения также различает обычные виды и виды SMM. Это соответствует кэшу MMIO SPTE, который уже использует kvm_vcpu_memslots().
На неподпатченном текущем ядре mainline регрессионный тест, заполняющий кэш в режиме SMM и обновляющий только memslot'ы SMM, не выполняет ожидаемую запись в RAM и вызывает предупреждение в kvm_mmu_write_protect_fault(). С этим изменением тот же тест завершает запись в RAM без вывода предупреждений. Самопроверки (selftests) x86/smm_test, set_memory_region_test и memslot_modification_stress_test также проходят успешно.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.