CVE-2026-68093 in LinuxИнформация

Сводка

по VulDB • 10.08.2026

В ядре Linux устранена следующая уязвимость:

KVM: SVM: Увеличение asid_generation при включении процессора для предотвращения коллизии ASID после горячей замены (hotplug)

Если виртуальный CPU (vCPU) находится в состоянии вытеснения из расписания или блокировки, пока последний физический CPU (pCPU), на котором он выполнялся, проходит цикл горячей замены (online->offline->online), и vCPU затем возобновляет выполнение на том же pCPU, возможно его выполнение с ASID, который уже был назначен другому vCPU. Это приводит к использованию устаревших трансляций TLB.

Функция svm_enable_virtualization_cpu() сбрасывает asid_generation до 1 и устанавливает next_asid в max_asid + 1 при каждом событии включения процессора (online), включая циклы горячей замены. Поскольку значение next_asid изначально превышает границу пула, первый вызов new_asid() после события online всегда вызывает переполнение пула, увеличивая asid_generation до 2 и назначая ASID начиная с min_asid.

Рассмотрим два vCPU из разных виртуальных машин: vCPU-A, закрепленный за CPU-X, имеющий значение asid_generation=2 и ASID=N до события горячей замены:

1. CPU-X отключается (offline) и снова включается (online): asid_generation сбрасывается до 1, next_asid = max_asid + 1. 2. Один или несколько vCPU мигрируют на CPU-X и вызывают new_asid(), вызывая переполнение пула и потребляя ASID начиная с min_asid. В конечном итоге vCPU-B из другой виртуальной машины получает asid_generation=2, ASID=N — тот же самый ASID, который принадлежал vCPU-A до горячей замены. 3. vCPU-A входит в pre_svm_run() на CPU-X: поле current_vmcb->cpu не изменилось, поэтому ветвь миграции пропускается. Его сохраненное значение asid_generation=2 совпадает с sd->asid_generation=2, поэтому проверка поколения проходит молча, и vCPU-A продолжает выполнение с ASID=N — тем же самым ASID, который только что был назначен vCPU-B.

Оба vCPU из разных виртуальных машин теперь выполняются на CPU-X с одним и тем же ASID, заставляя их разделять записи NPT TLB и приводя к использованию устаревших трансляций.

Коллизия проявляется как внутренняя ошибка KVM (Suberror: 1, failure эмуляции). Ошибка страницы NPT сообщает о GPA нарушения границ физической памяти виртуальной машины — признак использования устаревших трансляций TLB. KVM переходит к эмуляции инструкций, которая завершается неудачей на инструкциях FPU/XSave (XRSTOR, STMXCSR), не реализованных в эмуляторе.

Исправление заключается во включении инкремента asid_generation вместо его сброса до 1 в svm_enable_virtualization_cpu(). При загрузке модуля asid_generation инициализируется нулем (memset), а операция инкремента дает значение 1, что идентично старому поведению. В последующих циклах горячей замены поколение увеличивается, превышая любое значение, которое vCPU ранее наблюдал на этом процессоре, поэтому проверка поколения в pre_svm_run() надежно принудительно вызывает new_asid() для каждого vCPU после каждой операции горячей замены.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Ответственный

Linux

Резервировать

30.07.2026

Раскрытие

10.08.2026

Модерация

принято

Вход

VDB-387451

EPSS

0.00000

KEV

Нет

Деятельности

Очень низкий

Сектор

Energy, Pharma, ...

Источники

Do you want to use VulDB in your project?

Use the official API to access entries easily!