Wydanie emulatora QEMU 6.0

Przedstawiono wydanie projektu QEMU 6.0. Jako emulator QEMU umożliwia uruchomienie programu zbudowanego dla jednej platformy sprzętowej na systemie o zupełnie innej architekturze, np. uruchomienie aplikacji ARM na komputerze zgodnym z architekturą x86. W trybie wirtualizacji w QEMU wydajność wykonywania kodu w izolowanym środowisku jest zbliżona do systemu sprzętowego ze względu na bezpośrednie wykonywanie instrukcji na CPU oraz zastosowanie hiperwizora Xen lub modułu KVM.

Projekt został pierwotnie stworzony przez Fabrice'a Bellarda, aby umożliwić uruchamianie plików wykonywalnych Linuksa zbudowanych dla platformy x86 na architekturach innych niż x86. Przez lata rozwoju dodano pełną obsługę emulacji dla 14 architektur sprzętowych, liczba emulowanych urządzeń sprzętowych przekroczyła 400. W ramach przygotowań do wersji 6.0 dokonano ponad 3300 zmian od 268 programistów.

Kluczowe ulepszenia dodane w QEMU 6.0:

  • Emulator kontrolera NVMe jest zgodny ze specyfikacją NVMe 1.4 i jest wyposażony w eksperymentalną obsługę strefowych przestrzeni nazw, wielościeżkowe wejścia/wyjścia i kompleksowe szyfrowanie danych na dysku.
  • Dodano opcje eksperymentalne „-machine x-remote” i „-device x-pci-proxy-dev”, aby przenieść emulację urządzenia do procesów zewnętrznych. W tym trybie obsługiwana jest obecnie tylko emulacja adaptera SCSI lsi53c895.
  • Dodano eksperymentalną obsługę tworzenia migawek zawartości pamięci RAM.
  • Dodano moduł FUSE do eksportowania urządzeń blokowych, umożliwiający zamontowanie wycinka stanu dowolnego urządzenia blokowego używanego w systemie gościa. Eksport odbywa się za pomocą polecenia block-export-add QMP lub opcji „--export” w narzędziu qemu-storage-daemon.
  • Emulator ARM dodaje obsługę architektury ARMv8.1-M „Helium” i procesorów Cortex-M55, a także rozszerzone instrukcje ARMv8.4 TTST, SEL2 i DIT. Dodano także obsługę płyt ARM mps3-an524 i mps3-an547. Dodatkowa emulacja urządzenia została zaimplementowana dla płyt xlnx-zynqmp, xlnx-versal, sbsa-ref, npcm7xx i sabrelite.
  • Dla ARM, w trybach emulacji na poziomie systemu i środowiska użytkownika, zaimplementowano obsługę rozszerzenia ARMv8.5 MTE (MemTag, Memory Tagging Extension), które pozwala na powiązanie tagów z każdą operacją alokacji pamięci i zorganizowanie sprawdzania wskaźnika podczas dostęp do pamięci, która musi być powiązana z właściwym tagiem. Rozszerzenie może służyć do blokowania wykorzystania luk spowodowanych dostępem do już zwolnionych bloków pamięci, przepełnieniem bufora, dostępami przed inicjalizacją oraz użyciem poza bieżącym kontekstem.
  • Emulator architektury 68k dodał obsługę nowego typu emulowanej maszyny „virt”, która wykorzystuje urządzenia virtio w celu optymalizacji wydajności.
  • Emulator x86 dodaje możliwość wykorzystania technologii AMD SEV-ES (Secure Encrypted Virtualization) do szyfrowania rejestrów procesora używanych w systemie gościa, dzięki czemu zawartość rejestrów staje się niedostępna dla środowiska hosta, chyba że system gościa wyraźnie udzieli do nich dostępu.
  • Klasyczny generator kodu TCG (Tiny Code Generator), emulując systemy x86, implementuje obsługę mechanizmu PKS (Protection Keys Supervisor), który może służyć do ochrony dostępu do uprzywilejowanych stron pamięci.
  • Do emulatora architektury MIPS dodano nowy typ emulowanych maszyn „virt” z obsługą chińskich procesorów Loongson-3.
  • W emulatorze architektury PowerPC dla emulowanych maszyn „powernv” dodano obsługę zewnętrznych kontrolerów BMC. W przypadku emulowanych maszyn pserie dostarczane jest powiadomienie o niepowodzeniach podczas próby usunięcia pamięci i procesora na gorąco.
  • Dodano obsługę emulacji procesorów Qualcomm Hexagon z procesorem DSP.
  • Klasyczny generator kodów TCG (Tiny Code Generator) obsługuje środowiska hostów macOS w systemach z nowym chipem Apple M1 ARM.
  • Emulator architektury RISC-V dla płyt Microchip PolarFire obsługuje pamięć flash QSPI NOR.
  • Emulator Tricore obsługuje teraz nowy model płyty TriBoard, który emuluje SoC Infineon TC27x.
  • Emulator ACPI zapewnia możliwość nadawania nazw kartom sieciowym w systemach-gościach, niezależnie od kolejności ich podłączenia do magistrali PCI.
  • virtiofs dodał obsługę opcji FUSE_KILLPRIV_V2, aby poprawić wydajność gościa.
  • VNC dodało obsługę przezroczystości kursora i obsługę skalowania rozdzielczości ekranu w virtio-vga, w oparciu o rozmiar okna.
  • QMP (QEMU Machine Protocol) dodał obsługę asynchronicznego dostępu równoległego podczas wykonywania zadań tworzenia kopii zapasowych.
  • Emulator USB dodał możliwość zapisywania ruchu generowanego podczas pracy z urządzeniami USB w oddzielnym pliku pcap w celu późniejszej kontroli w Wireshark.
  • Dodano nowe polecenia QMP: ładowanie migawki, zapisywanie migawki i usuwanie migawki do zarządzania migawkami qcow2.
  • Luki CVE-2020-35517 i CVE-2021-20263 zostały naprawione w virtiofs. Pierwszy problem umożliwia dostęp do środowiska hosta z systemu gościa poprzez utworzenie specjalnego pliku urządzeń w systemie gościa przez uprzywilejowanego użytkownika w katalogu współdzielonym ze środowiskiem hosta. Drugi problem jest spowodowany błędem w obsłudze rozszerzonych atrybutów w opcji 'xattrmap' i może powodować ignorowanie uprawnień do zapisu i eskalację uprawnień w systemie-gościu.

Źródło: opennet.ru

Dodaj komentarz