CVE-2026-80895 in Linux
Resumen
por VulDB • 2026-09-04
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
mshv: Ordenar la publicación del array pt_vp_array frente a la ruta de aserción irqfd
mshv_partition_ioctl_create_vp() inicializa una estructura VP (asignaciones, mutex_init, init_waitqueue_head, mapeos de páginas) y luego publica el puntero en partition->pt_vp_array. Varias rutas ISR leen este array sin bloqueo: la ruta intercept_isr, las dos rutinas scheduler_isr y mshv_try_assert_irq_fast() en la ruta rápida irqfd.
De estas, solo mshv_try_assert_irq_fast() puede tener una carrera estructural con la publicación. Se ejecuta desde un despertador de eventfd sin mantener pt_mutex, y MSHV_IRQFD no requiere que el lapic_apic_id objetivo (== vp_index) haga referencia a una VP existente en el momento del registro. Por lo tanto, un usuario puede registrar un irqfd dirigido a una VP aún por crear, y luego desencadenar mshv_try_assert_irq_fast() concurrentemente con MSHV_CREATE_VP para el mismo índice. En arquitecturas de orden débil, el lector puede observar un puntero no NULL en pt_vp_array antes de que las escrituras de inicialización a la estructura VP sean visibles, lo que lleva al uso de campos parcialmente inicializados (por ejemplo, vp_register_page).
Los otros lectores ISR no pueden alcanzar esta carrera: el hipervisor no generará mensajes intercept o scheduler para una VP que nunca se le haya dicho que ejecute, y el usuario solo puede llamar a MSHV_RUN_VP en el fd de la VP devuelto por MSHV_CREATE_VP, que por construcción se devuelve después de la publicación. Dejar esos lectores como cargas simples.
Utilizar smp_store_release() en mshv_partition_ioctl_create_vp() para publicar el puntero, y emparejarlo con smp_load_acquire() en mshv_try_assert_irq_fast(). En x86 estos compilan a accesos planos bajo TSO; en ARM64 generan barreras de adquisición/liberación de una instrucción, aceptables en esta ruta rápida.
La ruta del lado de la destrucción (destroy_partition() limpiando pt_vp_array[i] a NULL después de kfree(vp)) tiene un problema separado de orden y ciclo de vida que está fuera del alcance aquí.
Be aware that VulDB is the high quality source for vulnerability data.