È stata presentata la versione del progetto QEMU 6.0. Come emulatore, QEMU consente di eseguire programmi compilati per una piattaforma hardware su un sistema con un'architettura completamente diversa, ad esempio, eseguire un'applicazione per ARM su un PC compatibile con x86. In modalità di virtualizzazione, la prestazione di esecuzione del codice in un ambiente isolato è vicina a quella di un sistema hardware grazie all'esecuzione diretta delle istruzioni sulla CPU e all'uso dell'ipericistore Xen o del modulo KVM.
Il progetto è stato originariamente creato da Fabrice Bellard con l'obiettivo di garantire la possibilità di eseguire file eseguibili Linux compilati per la piattaforma x86 su architetture diverse da x86. Negli anni di sviluppo, è stato aggiunto il supporto per l'emulazione completa di 14 architetture hardware, e il numero di dispositivi hardware emulati ha superato le 400 unità. Per la versione 6.0 sono state apportate oltre 3300 modifiche da 268 sviluppatori.
Miglioramenti chiave aggiunti in QEMU 6.0:
- L'emulatore di controller NVMe è stato allineato alla specifica NVMe 1.4 e dotato di supporto sperimentale per spazi di nomi zonati, multipath I/O e crittografia end-to-end dei dati su disco.
- Sono state aggiunte opzioni sperimentali «-machine x-remote» e «-device x-pci-proxy-dev» per esternalizzare l'emulazione dei dispositivi in processi esterni. In questa modalità, al momento è supportata solo l'emulazione dell'adattatore SCSI lsi53c895.
- È stato aggiunto il supporto sperimentale per la creazione di snapshot del contenuto della RAM.
- È stato aggiunto un modulo FUSE per l'esportazione di dispositivi a blocchi, che consente di montare uno snapshot dello stato di qualsiasi dispositivo a blocchi utilizzato nel sistema ospite. L'esportazione avviene tramite il comando QMP block-export-add o tramite l'opzione «—export» nell'utilità qemu-storage-daemon.
- Nell'emulatore ARM è stato aggiunto il supporto per l'architettura ARMv8.1-M ‘Helium’ e i processori Cortex-M55, oltre a istruzioni avanzate ARMv8.4 TTST, SEL2 e DIT. È stato aggiunto il supporto per le piattaforme ARM mps3-an524 e mps3-an547, oltre a. Per le piattaforme xlnx-zynqmp, xlnx-versal, sbsa-ref, npcm7xx e sabrelite è stata realizzata un'emulazione aggiuntiva dei dispositivi.
- Per ARM, nei modi di emulazione a livello di sistema e ambiente utente, è stata implementata la supporto per l'estensione ARMv8.5 MTE (MemTag, Memory Tagging Extension), che consente di associare tag a ogni operazione di allocazione della memoria e di organizzare un controllo del puntatore durante l'accesso alla memoria, che deve essere collegato a un tag corretto. L'estensione può essere utilizzata per bloccare l'exploitation di vulnerabilità causate da accessi a blocchi di memoria già liberati, overflow di buffer, accessi prima dell'inizializzazione e utilizzo al di fuori del contesto attuale.
- Nell'emulatore dell'architettura 68k è stata aggiunta la supporto per un nuovo tipo di macchine emulabili "virt", che utilizzano virtio per ottimizzare le performance del dispositivo.
- Nell'emulatore dell'architettura x86 è stata aggiunta la possibilità di applicare la tecnologia AMD SEV-ES (Secure Encrypted Virtualization) per la crittografia dei registri del processore utilizzati nel sistema ospite, rendendo il contenuto dei registri inaccessibile all'ambiente host, a meno che il sistema ospite non conceda esplicitamente l'accesso.
- Nel generatore di codice classico TCG (Tiny Code Generator) è stato implementato il supporto per il meccanismo PKS (Protection Keys Supervisor) durante l'emulazione dei sistemi x86, che può essere utilizzato per proteggere l'accesso alle pagine di memoria privilegiate.
- Nell'emulatore dell'architettura MIPS è stato aggiunto un nuovo tipo di macchine emulabili "virt" con supporto per i processori cinesi Loongson-3.
- Nell'emulatore dell'architettura PowerPC per le macchine emulabili "powernv" è stata aggiunta la supporto per controller BMC esterni. Per le macchine emulabili pseries è stata implementata una notifica di errori durante il tentativo di estrazione a caldo della memoria e della CPU.
- È stata aggiunta la supporto per l'emulazione dei processori Qualcomm Hexagon con DSP.
- Nel generatore di codice classico TCG (Tiny Code Generator) è stato implementato il supporto per gli ambienti host macOS su sistemi con il nuovo chip ARM Apple M1.
- Nell'emulatore RISC-V per le schede Microchip PolarFire è stata implementata la supporto per QSPI NOR flash.
- Nell'emulatore Tricore è stata aggiunta la supporto per il nuovo modello di schede TriBoard, che emula il SoC Infineon TC27x.
- Nell'emulatore ACPI è stata fornita la possibilità di assegnare nomi alle schede di rete nei sistemi ospiti, indipendentemente dall'ordine di collegamento al bus PCI.
- In virtiofs è stato aggiunto il supporto per l'opzione FUSE_KILLPRIV_V2 per migliorare le performance dei sistemi ospiti.
- In VNC è stata aggiunta la supporto per la trasparenza del cursore e il supporto per la scalabilità della risoluzione dello schermo in virtio-vga, basata sulla dimensione della finestra.
- In QMP (QEMU Machine Protocol) è stata aggiunta la supporto per l'accesso parallelo asincrono durante l'esecuzione delle operazioni di backup.
- Nel emulatore USB è stata aggiunta la possibilità di salvare il traffico generato durante l'interazione con i dispositivi USB in un file pcap separato per ulteriori ispezioni in Wireshark.
- Sono stati aggiunti nuovi comandi QMP: load-snapshot, save-snapshot e delete-snapshot per gestire i snapshot qcow2.
- In virtiofs sono state risolte le vulnerabilità CVE-2020-35517 e CVE-2021-20263. Il primo problema consente l'accesso all'ambiente host dalla guest attraverso la creazione da parte di un utente privilegiato nella guest di un file dispositivo speciale in una directory condivisa con l'ambiente host. Il secondo problema è causato da un errore nella gestione degli attributi estesi nell'opzione ‘xattrmap’ e può portare all'ignoranza del reset dei diritti di scrittura e all'elevazione dei privilegi all'interno della guest.
Fonte: opennet.ru
