¿Puede el sistema operativo modificar la tabla de vectores de interrupción del microcontrolador cuando está paravirtualizado?

Supongo que está hablando de que el SO invitado modifica la tabla de vectores de interrupción del SO host, ¿correcto? Y no estoy seguro de cómo se conecta el microcontrolador y la “paravirtualización”. Aquí solo me centraré en los conceptos de virtualización clásicos en la CPU normal. Franky, no conozco ningún microcontrolador que implemente software de virtualización (ya sea hardware o software).

El primer IDT (tabla de descriptores de interrupción) siempre se define y ejecuta en el Anillo 0 (es decir, requisitos de hardware y nada que ver con la virtualización). Y en la virtualización (de las cuales hay dos: Tipo 1 y Tipo 2), puede hacer que el SO invitado se ejecute en el Anillo 0 o que no sea cero (por ejemplo, VMware es el anillo 1 y QEMU es el anillo 3). Si el SO invitado está en el anillo 0, puede ejecutar su IDT, pero si no lo está, entonces se necesita la emulación de IDT, en el nivel que no sea el anillo0.

En la virtualización de tipo 1, nuevamente hay dos tipos de arquitectura: HVM (asistida por hardware) y paravirtualización.

En HVM está ejecutando IDT en ring0. Pero no en paravirtualización.

Hipervisores y virtualización: VMware, Hyper-V, XenServer y KVM

Y el IDT para HVM (asistido por hardware) también es compartido por todos los SO invitados (el “controlador de dispositivo” a continuación está en el anillo 0):

En la virtualización de tipo 2, el sistema operativo host siempre tiene el control del IDT. Y hay dos posibilidades: virtualización de hadware (p. Ej., KVM) o virtualización emulada por software (Boch).

En el escenario KVM, el IDT del SO huésped se está ejecutando en el anillo 3, por lo que no hay forma de interferir con el IDT del sistema operativo del host en el anillo 0, pero la interferencia a través de la ruta de vulnerabilidad aún es posible, ya que KVM tiene un componente de módulo de núcleo ejecutándose en el anillo 0.

En el caso de Boch, * teóricamente * no hay forma de modificar el anillo 0 IDT (host) por un anillo 3 IDT (invitado).

Para resumir:

Tanto para el tipo 1 como para el tipo 2, siempre que use “virtualización de hardware”, el ID del sistema operativo invitado está en el anillo 0: