Została wydana wersja projektu QEMU 6.0. Jako emulator, QEMU pozwala uruchomić program zbudowany dla jednej platformy sprzętowej na systemie z zupełnie inną architekturą, na przykład, uruchomić aplikację dla ARM na komputerze zgodnym z x86. W trybie wirtualizacji wydajność wykonania kodu w izolowanym środowisku jest zbliżona do systemu sprzętowego dzięki bezpośredniemu wykonywaniu instrukcji na CPU i wykorzystaniu hipernadzorcy Xen lub modułu KVM.
Początkowo projekt został stworzony przez Fabrice'a Bellarda w celu umożliwienia uruchamiania plików wykonywalnych Linux zbudowanych dla platformy x86 na architekturach innych niż x86. Na przestrzeni lat dodano wsparcie dla pełnej emulacji 14 architektur sprzętowych, a liczba emulowanych urządzeń sprzętowych przekroczyła 400. Przygotowując wersję 6.0 wprowadzono ponad 3300 zmian od 268 programistów.
Kluczowe ulepszenia dodane do QEMU 6.0:
- Emulator kontrolerów NVMe został dostosowany do specyfikacji NVMe 1.4 i wyposażony w eksperymentalne wsparcie dla nazw związków zonowanych, multipath I/O oraz szyfrowania danych na nośniku.
- Dodano eksperymentalne opcje „-machine x-remote” i „-device x-pci-proxy-dev” pozwalające na przeniesienie emulacji urządzeń do zewnętrznych procesów. W tym trybie wspierana jest jedynie emulacja adaptera SCSI lsi53c895.
- Dodano eksperymentalne wsparcie dla tworzenia migawków zawartości pamięci RAM.
- Dodano moduł FUSE do eksportowania urządzeń blokowych, umożliwiający montowanie stanu dowolnego urządzenia blokowego używanego w systemie gościnnym. Eksport odbywa się za pomocą polecenia QMP block-export-add lub przez opcję „—export” w narzędziu qemu-storage-daemon.
- Do emulatora ARM dodano wsparcie dla architektury ARMv8.1-M 'Helium' oraz procesorów Cortex-M55, a także rozszerzonych instrukcji ARMv8.4 TTST, SEL2 i DIT. Dodano wsparcie dla płyt ARM mps3-an524 i mps3-an547. Dla płyt xlnx-zynqmp, xlnx-versal, sbsa-ref, npcm7xx oraz sabrelite wprowadzono dodatkową emulację urządzeń.
- Dla architektury ARM w trybach emulacji na poziomie systemu i użytkownika wprowadzono wsparcie dla rozszerzenia ARMv8.5 MTE (MemTag, rozszerzenie tagowania pamięci), które pozwala na przypisanie tagów do każdej operacji alokacji pamięci oraz organizowanie weryfikacji wskaźnika przy dostępie do pamięci, który powinien być powiązany z odpowiednim tagiem. Rozszerzenie to może być stosowane w celu zablokowania wykorzystywania luk, które mogą wystąpić w wyniku dostępu do już zwolnionych bloków pamięci, przepełnień bufora, dostępu przed inicjalizacją oraz wykorzystania poza bieżącym kontekstem.
- W emulatorze architektury 68k dodano wsparcie dla nowego typu emulowanych maszyn "virt", które wykorzystują virto do optymalizacji wydajności urządzeń.
- W emulatorze architektury x86 dodano możliwość zastosowania technologii AMD SEV-ES (Secure Encrypted Virtualization) do szyfrowania rejestrów procesora używanych w systemie gościnnym, co sprawia, że zawartość rejestrów jest niedostępna dla środowiska hosta, chyba że system gościnny wyraźnie udostępni do nich dostęp.
- W klasycznym generatorze kodu TCG (Tiny Code Generator) w emulacji systemów x86 wprowadzono wsparcie dla mechanizmu PKS (Protection Keys Supervisor), który można zastosować do ochrony dostępu do przywilejowanych stron pamięci.
- W emulatorze architektury MIPS dodano nowy typ emulowanych maszyn "virt" z wsparciem dla chińskich procesorów Loongson-3.
- W emulatorze architektury PowerPC dla emulowanych maszyn "powernv" dodano wsparcie dla zewnętrznych kontrolerów BMC. Dla emulowanych maszyn pseries zapewniono informowanie o awariach podczas próby gorącego wyciągania pamięci i CPU.
- Dodano wsparcie dla emulacji procesorów Qualcomm Hexagon z DSP.
- W klasycznym generatorze kodu TCG (Tiny Code Generator) wprowadzono wsparcie dla środowisk macOS na systemach z nowym chipem ARM Apple M1.
- W emulatorze architektury RISC-V dla płytek Microchip PolarFire wprowadzono wsparcie dla QSPI NOR flash.
- W emulatorze Tricore pojawiło się wsparcie dla nowego modelu płyty TriBoard, emulującej SoC Infineon TC27x.
- W emulatorze ACPI umożliwiono przypisywanie adapterom sieciowym w systemach gościnnych nazw, niezależnych od kolejności podłączenia do magistrali PCI.
- W virtiofs dodano wsparcie dla opcji FUSE_KILLPRIV_V2 w celu zwiększenia wydajności systemów gościnnych.
- W VNC dodano wsparcie dla przezroczystości kursora oraz możliwość skalowania rozdzielczości ekranu w virtio-vga, dostosowaną do wielkości okna.
- W QMP (QEMU Machine Protocol) dodano wsparcie dla asynchronicznego równoległego dostępu podczas wykonywania zadań kopii zapasowej.
- W emulatorze USB dodano możliwość zapisywania ruchu generowanego podczas pracy z urządzeniami USB do oddzielnego pliku pcap, który można później analizować w Wireshark.
- Dodano nowe komendy QMP: load-snapshot, save-snapshot i delete-snapshot do zarządzania migawkami qcow2.
- W virtiofs usunięto luka CVE-2020-35517 oraz CVE-2021-20263. Pierwszy problem umożliwia dostęp do środowiska hosta z systemu gościa poprzez stworzenie przez użytkownika z przywilejami specjalnego pliku urządzeń w katalogu współdzielonym z środowiskiem hosta. Drugi problem wynika z błędu w przetwarzaniu rozszerzonych atrybutów w opcji 'xattrmap' i może prowadzić do zignorowania resetowania praw do zapisu oraz podwyższenia uprawnień wewnątrz systemu gościa.
Źródło: opennet.ru
