CVE-2026-98473 in Linuxinfo

Zusammenfassung

von VulDB • 19.10.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

s390/vfio-ap: Behebung von KVM GISC- und Seitenlecks beim Entfernen einer Queue aus der Hostkonfiguration

Bei der Behandlung von KVM-Interrupt- und Seitensressourcen treten drei zusammenhängende Probleme auf, wenn eine Queue aus der AP-Konfiguration des Hosts entfernt wird, während sie einem vermittelten Gerät (mdev) zugewiesen ist.

Problem 1: ~~~~~~~~~ AP_RESPONSE_Q_NOT_AVAIL nicht in vfio_ap_mdev_reset_queue() behandelt

Wenn der AP-Bus ein Queuengerät entfernt, dessen Adapter oder Domäne aus der AP-Konfiguration des Hosts gelöscht wurde, wird vfio_ap_mdev_remove_queue() aufgerufen. Wenn die Queue zu diesem Zeitpunkt noch in der AP-Konfiguration des Hosts vorhanden ist, ruft sie vfio_ap_mdev_reset_queue() auf, das einen PQAP(ZAPQ)-Befehl ausführt. Da der Adapter bereits aus der Hostkonfiguration entfernt wurde, gibt ap_zapq() den Antwortcode AP_RESPONSE_Q_NOT_AVAIL (0x01) zurück. Dieser Antwortcode wird in der switch-Anweisung von vfio_ap_mdev_reset_queue() nicht behandelt und fällt durch zum default-Fall, der eine WARN-Ausgabe erzeugt, aber vfio_ap_free_aqic_resources() nicht aufruft. Infolgedessen werden die KVM GISC-Registrierung sowie die gepinnte Gastseite, die das Benachrichtigungsindikatorbyte (NIB) enthält, beide geleakt, wenn die IRQ-Behandlung für die Queue vom Gast aktiviert war.

Dies wird behoben, indem AP_RESPONSE_Q_NOT_AVAIL demselben Fall wie AP_RESPONSE_DECONFIGURED und AP_RESPONSE_CHECKSTOPPED in vfio_ap_mdev_reset_queue() hinzugefügt wird. Wie diese Antwortcodes zeigt Q_NOT_AVAIL an, dass die Queue nicht betriebsbereit ist und keine weiteren Reset-Versuche möglich sind; die korrekte Maßnahme besteht darin, die IRQ-Ressourcen sofort freizugeben.

Problem 2: ~~~~~~~~~ AP_RESPONSE_Q_NOT_AVAIL nicht in apq_status_check() behandelt

In vfio_ap_mdev_reset_queue() gibt es vier Fälle, die darauf hinweisen, dass ein Queue-Reset noch nicht abgeschlossen ist; in diesen Fällen wird apq_reset_check() zur einer Workqueue hinzugefügt, um den Abschluss des Reset-Vorgangs zu überprüfen. Diese Funktion verwendet den PQAP(TAPQ)-Befehl, um den Status der Queue abzurufen, und ruft apq_status_check() auf, um zu verifizieren, ob der Reset abgeschlossen, fehlgeschlagen oder erneut ausgeführt werden muss. Wie im Problem #1 oben beschrieben, prüft apq_reset_check() nicht explizit auf AP_RESPONSE_Q_NOT_AVAIL, wodurch potenziell die KVM GISC-Registrierung und die gepinnte Gastseite, die das NIB enthält, geleakt werden.

Dies wird behoben, indem eine case-Anweisung für AP_RESPONSE_Q_NOT_AVAIL zu apq_status_check() hinzugefügt wird und -ENODEV für diesen Fall zurückgegeben wird. Der Aufrufer, apq_reset_check(), prüft dann auf diesen Rückgabewert und ruft vfio_ap_free_aqic_resources() auf, um das Leck zu verhindern.

Problem 3: ~~~~~~~~~ vfio_ap_free_aqic_resources() lässt saved_isc leaken, wenn kvm NULL ist

vfio_ap_free_aqic_resources() schützt den Aufruf von kvm_s390_gisc_unregister() mit:

if (q->saved_isc != VFIO_AP_ISC_INVALID && !WARN_ON(!(q->matrix_mdev && q->matrix_mdev->kvm)))

Wenn matrix_mdev->kvm NULL ist – was passieren kann, wenn vfio_ap_mdev_unset_kvm() bereits ausgeführt wurde und kvm gelöscht hat, bevor ein nachfolgender Bereinigungspfad diese Funktion erreicht –, wird die WARN_ON ausgelöst und der gesamte Block übersprungen. Dies lässt q->saved_isc auf einem ungültigen Wert stehen, was zu einem potenziellen Double-Free bei jedem nachfolgenden Aufruf dieser Funktion führt.

Wenn kvm NULL ist, wurde das KVM-Gastsystem bereits abgebaut, sodass kvm_s390_gisc_unregister() weder aufgerufen werden darf noch kann; jedoch muss q->saved_isc immer zurückgesetzt werden. Dies wird behoben, indem der Aufruf von kvm_s390_gisc_unregister() vom Zurücksetzen von q->saved_isc getrennt wird. Die WARN_ON schützt nun nur noch den tatsächlich unmöglichen Fall, dass matrix_mdev NULL ist. Ein NULL-kvm wird durch das bloße Überspringen des Unregister-Aufrufs graceful behandelt, und q->saved_isc = VFIO_AP_ISC_INVALID wird bedingungslos festgelegt, wenn saved_isc nicht bereits ungültig war.

Zusätzlich wurde eine else-Klausel zur Host-Config-Prüfung in vfio_ap_mdev_remove_queue() hinzugefügt, um vfio_ap_free_aqic_resources() direkt aufzurufen, wenn die Queue nicht in der AP-Konfiguration des Hosts vorhanden ist. Dies dient als Sicherheitsnetz: Wenn der AP-Bus den Treiber-.remove-Callback nach dem Entfernen eines Adapters aus der Hostkonfiguration auslöst, ist die Queue per Definition nicht mehr adressierbar, sodass vfio_ap_mdev_reset_queue ---gekürzt---

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Zuständig

Linux

Reservieren

25.09.2026

Veröffentlichung

18.10.2026

Moderieren

akzeptiert

Eintrag

VDB-422115

EPSS

0.00000

KEV

nein

Aktivitäten

low

Quellen

Want to know what is going to be exploited?

We predict KEV entries!