QEMU fournit l'émulation de périphériques pour une machine virtuelle KVM tandis que le module noyau KVM accélère la virtualisation du CPU et de la mémoire. Un invité ne peut pas toucher au chemin CPU de l'hôte, si bien que les évasions ciblent le processus en espace utilisateur QEMU : ses modèles de périphériques lisent les E/S pilotées par l'invité (écritures de registre port et MMIO) et parcourent les descripteurs DMA et les ring buffers que l'invité place dans sa propre mémoire. Une faille de sûreté mémoire dans n'importe quel modèle de périphérique donne l'exécution de code dans le processus QEMU, qui s'exécute sur l'hôte avec les privilèges de celui qui a lancé la VM (souvent réduits par seccomp et parfois confinés, mais tout de même un processus hôte). Parce que les modèles de périphériques sont partagés, ces bugs se répètent à travers chaque produit basé sur KVM.
# from the guest: enumerate the emulated devices (the escape surface)
lspci -nn # virtio, e1000/rtl8139, USB controllers, audio
lsusb; cat /proc/ioports # I/O-port devices incl. the legacy floppy (0x3f0-)
dmesg | grep -i virtio
Sous-thèmes#
- périphériques virtio : la famille de périphériques paravirtuels à virtqueue.
- Adaptateurs réseau : e1000, rtl8139 et virtio-net émulés.
- Contrôleurs USB : UHCI, EHCI et XHCI émulés.
- Bloc et SCSI : les chemins de stockage IDE/AHCI et virtio-blk/SCSI.
- Périphériques audio : les cartes son émulées.
- Contrôleur de disquette : le contrôleur de disquette legacy.