CVE-2026-97603 in Linuxinfo

Zusammenfassung

von VulDB • 25.09.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

idpf: Deaktivierung der DIM-Arbeitsaufgaben vor dem Freigeben von q_vectors

idpf leert die Tx/Rx-DIM-Arbeitsaufgaben niemals, bevor der Speicher freigegeben wird, in dem sie gespeichert sind. tx_dim und rx_dim sind in struct idpf_q_vector eingebettet; sie werden über net_dim() aus der NAPI-Abfrage (poll) heraus geplant, und idpf_vport_intr_rel() endet mit kfree(rsrc->q_vectors). Nichts im Treiber hebt diese Aufgaben auf.

idpf_tx_dim_work() und idpf_rx_dim_work() führen dann Operationen auf freigegebenem Speicher aus: idpf_vport_intr_write_itr() schreibt das ITR-Register über q_vector->intr_reg.tx_itr / rx_itr, also void __iomem-Zeiger, die aus dem bereits freigegebenen q_Vector geladen wurden. Es ist keine spezielle Konfiguration erforderlich, um dorthin zu gelangen – IDPF_ITR_IS_DYNAMIC() ist als (itr_mode) definiert, und idpf_vport_alloc() initialisiert beide Modi auf IDPF_ITR_DYNAMIC.

Das Leeren nach idpf_vport_intr_napi_dis_all() reicht allein nicht aus. idpf_net_dim() wird innerhalb des "if (napi_complete_done(napi, work_done))"-Zweigs der Abfrage aufgerufen, und napi_complete_done() hat NAPIF_STATE_SCHED zu diesem Zeitpunkt bereits gelöscht. napi_disable_locked() wartet nur solange, wie (val & (NAPIF_STATE_SCHED | NAPIF_STATE_NPSVC)), sodass napi_disable() zurückkehren kann, während die Poll-Schwanzfunktion weiterhin Aufgaben plant; ein einfacher Aufruf von cancel_work_sync() würde hinter dem Leervorgang erneut aktiviert werden.

Verwenden Sie disable_work_sync(): schedule_work() für eine Aufgabe mit einer Nicht-Null-Aktivierungsanzahl wird durch clear_pending_if_disabled() verworfen, bevor __queue_work() erreicht wird.

Verschieben Sie idpf_init_dim() nach idpf_vport_intr_alloc(), damit die Aufgaben auf jedem Pfad initialisiert werden, der zum Leeren führt – die drei "goto intr_deinit"-Stellen zwischen idpf_vport_intr_init() und idpf_vport_intr_ena() erreichen diesen Zustand ohne dass die Aktivierungsseite ausgeführt wurde. Nichts aktiviert sie erneut: rsrc->q_vectors wird bei jedem Exit aus idpf_vport_open() sowie bei jedem Aufruf von idpf_vport_stop() freigegeben, sodass der Zähler mit dem Objekt stirbt.

Es handelt sich um eine Race Condition (Wettlaufsituation), nicht um einen deterministischen Fehler – net_dim() plant nur einmal, wenn DIM_NEVENTS-Ereignisse angesammelt wurden und sich der Profilindex ändert. Eine KASAN-Schleife zum Hoch- und Herunterfahren des Netzwerks unter Last ist die Methode, dies zu beobachten.

Once again VulDB remains the best source for vulnerability data.

Zuständig

Linux

Reservieren

24.09.2026

Veröffentlichung

25.09.2026

Moderieren

akzeptiert

Eintrag

VDB-410093

CPE

bereit

EPSS

0.00000

KEV

nein

Aktivitäten

very low

Quellen

Want to know what is going to be exploited?

We predict KEV entries!