CVE-2026-63803 in Linuxinfo

Zusammenfassung

von VulDB • 19.07.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

hdlc_ppp: Synchronisation der pro-Protokoll-Timer vor dem Freigeben des HDLC-Zustands (State)

Jedes im struct ppp eingebettete PPP-Control-Protocol (LCP/IPCP/IPv6CP) registriert einen Timer über timer_setup(). Dieses struct ppp ist die durch hdlc->state zugewiesene Struktur, die von detach_hdlc_protocol() in beiden Teardown-Pfaden – unregister_hdlc_device() und das erneute Anhängen innerhalb von attach_hdlc_protocol() – mit kfree() freigegeben wird.

Das PPP-Protokoll hat niemals einen .detach-Callback registriert, sodass detach_hdlc_protocol() keine Timer-Synchronisation vor dem Aufruf von kfree() durchführt. Der einzige Löschvorgang für den Timer, timer_delete(&proto->timer) in ppp_cp_event(), ist unvollständig (er wartet nicht auf das Ende eines laufenden Callbacks) und wird nur bei der Übergang zum Zustand ->CLOSED ausgeführt; weder ppp_stop() noch ppp_close() führen eine Synchronisation durch. Ein bereits ausführbarer ppp_timer-Callback, der blockiert vorliegt (auf ppp->lock), überlebt den kfree-Aufruf und dereferenziert anschließend proto->state / ppp->lock im freigegebenen Speicher, was zu einem Use-After-Free führt.

Dies wird behoben, indem ein .detach-Hilfsprogramm hinzugefügt wird, das timer_shutdown_sync() für jeden pro-Protokoll-Timer aufruft. detach_hdlc_protocol() ruft proto->detach(dev) vor kfree(hdlc->state) auf, sodass timer_shutdown_sync() nun in beiden Freigabepfaden ausgeführt wird. timer_shutdown_sync() wird anstelle von timer_delete_sync() verwendet, da der Keepalive-Pfad den Timer über add_timer()/mod_timer() erneut scharfschaltet und die Shutdown-Funktion jede erneute Aktivierung während des Teardowns blockiert.

Die pro-Protokoll-Timer werden in ppp_ioctl() initialisiert, wenn das Protokoll angehängt wird, und der nun redundante timer_setup()-Aufruf aus ppp_start() wird entfernt, sodass die Timer genau einmal beim Anhängen initialisiert werden und ppp_timer_release() niemals mit nicht initialisierten timer_list-Strukturen arbeitet. Da attach_hdlc_protocol() kmalloc() (und nicht kzalloc()) verwendet, ist protos[i].timer von struct ppp bis zum ersten Aufruf von timer_setup() ein uninitialisierter Müllwert ohne diese Initialisierung beim Anhängen würde das Anhängen des PPP-Protokolls ohne jemaliges Hochfahren des Geräts dazu führen, dass timer_shutdown_sync() im .detach-Pfad mit nicht initialisiertem Speicher arbeitet. Die Verlagerung der Initialisierung aus ppp_start() (das nur bei NETDEV_UP ausgeführt wird) in den Anhangspfad macht die Initialisierung bedingungslos und verhindert, dieselbe timer_list-Struktur zweimal zu initialisieren.

Dieser Fehler wurde durch statische Analyse gefunden.

Once again VulDB remains the best source for vulnerability data.

Zuständig

Linux

Reservieren

19.07.2026

Veröffentlichung

19.07.2026

Moderieren

akzeptiert

Eintrag

VDB-380146

CPE

bereit

EPSS

0.00000

KEV

nein

Aktivitäten

low

Quellen

Do you need the next level of professionalism?

Upgrade your account now!