CVE-2026-98302 in Linuxinfo

Zusammenfassung

von VulDB • 06.10.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

net: fddi: skfp: NULL-Dereferenzierung beim Festlegen der MAC-Adresse im Zustand „down“ beheben

skfp_ctl_set_mac_address() ruft ResetAdapter() bedingungslos auf, ohne netif_running() zu prüfen. ResetAdapter() ruft zunächst card_stop() auf, das smc->hw.hw_state auf STOPPED setzt, und anschließend mac_drv_clear_tx_queue(), welche die beiden Sendewarteschlangen (Transmit Queues) durchläuft:

for (i = QUEUE_S; i <= QUEUE_A0; i++) {
queue = smc->hw.fp.tx[i] ;
... t = queue->tx_curr_get ;

smc->hw.fp.tx[] wird nur von init_tx() befüllt, das über skfp_open() durch init_smt() -> init_fddi_driver() -> init_fplus() -> init_mac() -> init_tx() erreicht wird. Der private Bereich wird von alloc_fddidev() allokiert und auf Null gesetzt; bei einer Schnittstelle, die noch nie hochgefahren wurde, sind beide Warteschlangenzeiger daher weiterhin NULL. Die hw_state-Prüfung am Anfang von mac_drv_clear_tx_queue() fängt dies nicht ab, da card_stop() gerade STOPPED festgelegt hat; die Funktion fährt mit der Schleife fort und dereferenziert NULL. ResetAdapter() ruft zwar init_smt() selbst auf, jedoch erst nachdem die Warteschlangen geleert wurden.

Das Festlegen der MAC-Adresse bei einer im Zustand „down“ befindlichen Schnittstelle führt daher zu einem Kernel-Oops:

ip link set dev fddi0 address 02:00:00:00:00:01

BUG: KASAN: null-ptr-deref in mac_drv_clear_tx_queue+0x68/0x2c0 [skfp]
Read of size 8 at addr 0000000000000010 by task ip/302 Call Trace: mac_drv_clear_tx_queue+0x68/0x2c0 [skfp 6c01d4bab63c36978bd0a7d7e90837adb44cc37b]
ResetAdapter+0x29/0x100 [skfp 6c01d4bab63c36978bd0a7d7e90837adb44cc37b]
skfp_ctl_set_mac_address+0x57/0x80 [skfp 6c01d4bab63c36978bd0a7d7e90837adb44cc37b]
netif_set_mac_address+0x1e4/0x2c0 do_setlink+0x684/0x2680

Die Adresse 0x10 ist der Offset von tx_curr_get, dem dritten Zeiger in struct s_smt_tx_queue, auf 64-Bit-Systemen. mac_drv_clear_rx_queue(), das ResetAdapter() unmittelbar danach aufruft, dereferenziert smc->hw.fp.rx[QUEUE_R1] auf die gleiche Weise hinter derselben unwirksamen hw_state-Prüfung; die Sendewarteschlange stürzt lediglich zuerst ab. Beide Fälle werden durch den nachfolgenden Guard (Schutzmechanismus) abgedeckt.

Der Adapter-Reset soll übersprungen werden, wenn die Schnittstelle im Zustand „down“ ist. dev_addr_set() bleibt bedingungslos, sodass die neue Adresse weiterhin in dev->dev_addr gespeichert wird. Es geht nichts verloren, indem der Adapter hier nicht zurückgesetzt wird: skfp_open() liest bewusst bei jedem Öffnen die Werkadresse erneut aus,

read_address(smc, NULL); eth_hw_addr_set(dev, smc->hw.fddi_canon_addr.a);

und der Kommentar darüber besagt, dass dies genau dazu dient, eine solche Adressüberschreibung über einen Close/Open-Zyklus hinweg zu verwerfen. Eine Adresse, die festgelegt wurde, während die Schnittstelle im Zustand „down“ war, hätte das folgende Öffnen selbst vor dieser Änderung nicht überdauert; der Guard entfernt also kein funktionierendes Verhalten. Das Absichern des Hardware-Teils von ndo_set_mac_address() mit netif_running() ist etablierte Praxis; skge_set_mac_address() tut dies seit dem Commit 2eb3e621c4e0 („skge: set mac address bonding fix“).

Das Absichern des gesamten Resets, anstatt die Warteschlangen auf NULL zu prüfen, entspricht auch der Erwartung des Rests des Treibers. Nach einem vorherigen Open/Close sind die Warteschlangenzeiger veraltet (stale), aber nicht-NULL, sodass es zu keinem Absturz kommt; ResetAdapter() ruft jedoch weiterhin smt_online() und STI_FBI() („Enable Board Interrupts“) auf, während skfp_close() bereits free_irq() aufgerufen hat – der Adapter würde wieder online gebracht werden, ohne dass ein Handler installiert ist. Der einzige andere Aufrufer von ResetAdapter() ist skfp_interrupt(), der aufgrund seiner Konstruktion nur ausgeführt wird, wenn das Gerät geöffnet ist.

Gefunden durch automatisiertes Treibertesten gegen einen emulierten SysKonnect FDDI-Adapter unter einem KASAN-aktivierten Kernel 7.0.0. Das Auslösen erfordert CAP_NET_ADMIN.

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

Zuständig

Linux

Reservieren

25.09.2026

Veröffentlichung

06.10.2026

Moderieren

akzeptiert

Eintrag

VDB-414058

EPSS

0.00184

KEV

nein

Aktivitäten

very low

Quellen

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!