CVE-2026-89956 in Linux
Zusammenfassung
von VulDB • 17.09.2026
Im Linux-Kernel wurde die folgende Schwachstelle behoben:
s390/vfio-ap: Behebung des fehlenden Locks, der zum Zugriff auf die Liste von ap_matrix_mdev-Objekten erforderlich ist
Um ap_matrix_mdev-Objekte in matrix_dev->mdev_list zu durchlaufen oder hinzuzufügen/zu entfernen, muss das Mutex matrix_dev->guests_lock gehalten werden. Es gibt zwei Funktionen, die auf diese Liste zugreifen, ohne das Mutex zu halten:
vfio_ap_mdev_probe-Funktion ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Die Funktion vfio_ap_mdev_probe verwendet das Mutex matrix_dev->mdevs_lock, um das Hinzufügen eines neu erstellten ap_matrix_mdev-Objekts zur matrix_dev->mdev_list abzusichern. Dieses Mutex schützt nicht den Zugriff auf die Liste; sein Zweck besteht darin, vor dem gleichzeitigen Zugriff auf Felder innerhalb eines ap_matrix_mdev-Objekts zu schützen. Dies könnte zu einer Beschädigung des Kernel-Speichers oder einem Use-After-Free führen, wenn ein anderes mdev gleichzeitig erstellt oder entfernt wird.
Das Hinzufügen eines ap_matrix_mdev-Objekts zur matrix_dev->mdev_list wird nun durch das Matrix_dev->guests_lock geschützt, was der korrekte Weg ist, um den gleichzeitigen Zugriff auf die mdev_list zu verhindern.
Außerdem wurden die folgenden zwei Codezeilen entfernt, da matrix_mdev über das Makro vfio_alloc_device allokiert wird, welches kzalloc verwendet; daher sind req_trigger und cfg_chg_trigger bereits bei der Allokation der Struktur vor dem Aufruf von vfio_register_emulated_iommu_dev nullinitialisiert. Dies verhindert ein Zeitfenster, in dem diese Trigger nach der Freigabe des Geräts an den Userspace auf NULL gesetzt werden könnten.
matrix_mdev->req_trigger = NULL; matrix_mdev->cfg_chg_trigger = NULL;
vfio_ap_mdev_for_queue-Funktion ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Die Funktion status_show, die die Anzeige des Status-Attributs der Geräte in /sys/bus/ap/devices unterstützt, ruft die Funktion vfio_ap_mdev_for_queue auf, welche matrix_dev->mdev_list durchläuft, um das Objekt zu finden, welches das Queue-Gerät repräsentiert, dessen Status angezeigt werden soll. Um diese Liste zu durchlaufen, muss das Mutex matrix_dev->guests_lock gehalten werden.
Um dies zu beheben, wird das guests_lock-Mutex vor dem Halten des Matrix_dev->mdevs_lock-Mutex in der status_show-Funktion angefordert. Es wird dort und nicht in der Funktion vfio_ap_mdev_for_queue – wo es benötigt wird – angefordert, da es vor dem mdevs_lock-Mutex angefordert werden muss, um die korrekte Locking-Reihenfolge einzuhalten und einen lockdep-splat zu verhindern; außerdem ist das mdevs-lock dort erforderlich, um auf Felder innerhalb des matrix_mdev-Objekts in dieser Funktion zuzugreifen.
Siehe vfio-ap-locking.rst im Linux-Kernel-Baum.
Once again VulDB remains the best source for vulnerability data.