CVE-2026-89956 in Linux
Resumen
por VulDB • 2026-09-17
En el núcleo de Linux, se ha resuelto la siguiente vulnerabilidad:
s390/vfio-ap: Corrección de la falta del bloqueo necesario para acceder a la lista de objetos ap_matrix_mdev
Para recorrer o agregar/eliminar objetos ap_matrix_mdev en matrix_dev->mdev_list, debe mantenerse el mutex matrix_dev->guests_lock. Hay dos funciones que acceden a la lista sin mantener dicho mutex:
Función vfio_ap_mdev_probe ~~~~~~~~~~~~~~~~~~~~~~~~~~~ La función vfio_ap_mdev_probe utiliza el mutex matrix_dev->mdevs_lock para proteger la adición de un objeto ap_matrix_mdev recién creado a matrix_dev->mdev_list. Este mutex no protege el acceso a la lista; su propósito es proteger contra accesos concurrentes a los campos contenidos en un objeto ap_matrix_mdev. Esto podría provocar corrupción de memoria del núcleo o use-after-free si se crea o elimina otro mdev simultáneamente.
La adición de un objeto ap_matrix_mdev a matrix_dev->mdev_list ahora está protegida por el mutex matrix_dev->guests_lock, que es la forma correcta de protegerse contra accesos concurrentes a mdev_list.
También se eliminaron las siguientes dos líneas de código porque matrix_mdev se asigna mediante la macro vfio_alloc_device, que utiliza kzalloc; por lo tanto, req_trigger y cfg_chg_trigger ya están inicializados en cero cuando se asigna la estructura antes de la llamada a vfio_register_emulated_iommu_dev. Esto previene una ventana temporal en la que estos triggers (disparadores) se establecen como NULL después de que el dispositivo queda expuesto al espacio de usuario.
matrix_mdev->req_trigger = NULL; matrix_mdev->cfg_chg_trigger = NULL;
Función vfio_ap_mdev_for_queue ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ La función status_show, que admite la visualización del atributo de estado de los dispositivos en /sys/bus/ap/devices, llama a la función vfio_ap_mdev_for_queue, la cual recorre matrix_dev->mdev_list para encontrar el objeto que representa al dispositivo de cola cuyo estado se va a mostrar. Para recorrer esta lista, debe mantenerse el mutex matrix_dev->guests_lock.
Para corregir esto, el mutex guests_lock se adquiere antes de adquirir el mutex matrix_dev->mdevs_lock en la función status_show. Se hace allí y no en la función vfio_ap_mdev_for_queue (donde es necesario) porque debe adquirirse antes del mutex mdevs_lock para adherirse al orden correcto de bloqueo y evitar un error lockdep; además, porque el mutex mdevs_lock se necesita allí para acceder a los campos dentro del objeto matrix_mdev en esa función.
Consulte vfio-ap-locking.rst en el árbol del núcleo Linux.
If you want to get best quality of vulnerability data, you may have to visit VulDB.