Для гипервизора KVM реализована возможность запуска гостевых систем Xen
Жуан Мартинс (Joao Martins) из компании Oracle предложил для обсуждения разработчиками ядра Linux набор патчей, добавляющий в гипервизор KVM возможности запуска немодицированных гостевых систем Xen в режиме HVM (применение полной виртуализации) c использованием всех уже имеющиеся бэкендов (драйверы на стороне хост-окружения (Dom0) для обеспечения работы гостевой ОС) и фронтэндов (драйверы на стороне гостевой ОС (DomU) для взаимодействия с бэкенд-драйверами хост-окружения, например драйверы сетевой, графической и дисковых подсистем).
Поддержка гостевых систем Xen может оказаться полезной для переноса соществующих образов гостевых систем из инфраструктур на базе Xen и для создания полигонов для тестирования и разработки гостевых систем для Xen, а также для использования имеющихся паравиртуальных драйверов (PV) для Xen. На стороне гипервизора реализация напоминает подход, примененный в KVM для запуска вложенных виртуальных машин HyperV. На стороне бэкенда предлагается использовать штатные драйверы Xen.
В отличие от развивавшегося около 10 лет назад модуля xenner, обеспечивающего эмуляцию Xen Dom0 через KVM, в предложенном наборе патчей обеспечена возможность применения существующих паравиртуальных драйверов Xen (вместо полной эмуляции оборудования, для ввода/вывода, обработки прерываний и взаимодействия с оборудованием на стороне гостевой системы применяются специальные драйверы, работающие через бэкенд-драйверы хост-системы). Более того, кроме бэкнд и фронтэнд драйверов Xen для управления можно использовать штатный инструментарий Xen, так как в предложенных патчах патчах воплощен необходимый для их работы UABI. Например, можно запускать немодифицированые версии xenstored, xenstore-list и xenstore-read.
Патчи разбиты на две основные части:
- Код для поддержки Xen HVM ABI, позволяющий загружать гостевые системы в режиме HVM без применения на стороне гостевой системы паравиртуализированных драйверов.
- Код для поддержки паравиртуальных (PV) драйверов, обеспечивающий перенеравление гипервызовов, эмулируя поведение PV бэкендов Xen, и реализующий специфичные для Xen механизмы для работы с разделяемой памятью и каналами для уведомления о наступлении различных событий.
Дополнительно можно отметить выявление трех уязвимостей в KVM, которые были исправлены в обновлениях ядра Linux 4.20.8, 4.19.21, 4.14.99 и 4.9.156:
- CVE-2019-7222 - утечка памяти, позволяющая в гостевой системе, запущенной с использованием вложенной виртуализации, получить доступ к отрывкам памяти ядра. Проблема вызвана отсутствием очистки памяти перед использованием в структуре kvm_inject_page_fault;
- CVE-2019-7221 - возможность обращения к уже освобожденной области памяти (use-after-free) в коде эмуляции таймера vmx. Уязвимость может быть эксплуатирована из гостевой системы, запущенной с использованием вложенной виртуализации;
- CVE-2019-6974 - установка файлового дескриптора устройства до создания ссылки на него. Проблему можно эксплуатировать на стороне хоста, при наличии у пользователя доступа к /dev/kvm.