CVE-2026-64401 in Linux
Zusammenfassung
von VulDB • 27.07.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
smb: client: SWN-tcon aus aktiven Registrierungen auflösen
cifs_swn_notify() sucht eine Zeugenregistrierung (witness registration) anhand der ID unterhalb von cifs_swnreg_idr_mutex, gibt das Mutex frei und verwendet anschließend den zwischengespeicherten tcon-Zeiger dieser Registrierung. Dieser Zeiger ist keine Referenz mit garantierter Lebensdauer und stellt auch keinen stabilen Repräsentanten dar, sobald cifs_get_swn_reg() mehrere tcons für denselben Netzwerk-/Freigabennamen eine einzige Registrierungs-ID teilen lässt.
Ein zweiter Mount derselben Freigabe kann den cifs_swn_reg nach dem Abmelden (Unregister) und der Freigabe des ersten tcon am Leben erhalten. Die Registrierung zeigt dann weiterhin auf den freigegebenen ersten tcon, sodass das Sichern von tc_lock oder das Inkrementieren von tc_count über swnreg->tcon nur einen Use-After-Free-Fehler früher auslöst. Das Sichern von tc_lock bei gleichzeitig gehaltener cifs_swnreg_idr_mutex verstößt zudem gegen die dokumentierte CIFS-Sperrreihenfolge (lock order).
Dies wird behoben, indem die Registrierung ausschließlich die stabile Zeugenidentität speichert: ID, Netzwerkname, Freigabename und Benachrichtigungsflags. Wenn eine Benachrichtigung eingeht, wird diese Identität unterhalb von cifs_swnreg_idr_mutex kopiert, das Mutex freigegeben und anschließend ein aktueller (live) witness-tcon ermittelt und gesichert, der aktuell mit dem Netzwerk-/Freigabepaar übereinstimmt, wobei die normale Sperrreihenfolge cifs_tcp_ses_lock -> tc_lock eingehalten wird. Der Benachrichtigungspfad verwendet diesen gesicherten tcon direkt und gibt die Referenz nach Abschluss wieder frei.
Registrierungs- und Abmeldemeldungen verwenden nun den vom Aufrufer übergebenen aktiven tcon anstelle eines in der Registrierung zwischengespeicherten tcons. Das Senden des finalen Unregisters wird in cifs_swn_unregister() zusammengefasst, während die Registrierung noch durch cifs_swnreg_idr_mutex geschützt ist. Dadurch wird das vorherige Fenster für find/drop/reacquire (Suchen/Freigeben/Wiedererlangen) eines rohen Zeigers entfernt. Der Release-Pfad entfernt lediglich den idr-Eintrag und gibt die stabilen Identitätsstrings frei.
Dies bewahrt das beabsichtigte Verhalten einer Registrierung pro vielen tcons: Eine Registrierungs-ID repräsentiert ein Netzwerk-/Freigabepaar, und die Bearbeitung von Benachrichtigungen erfolgt an einem zum Zeitpunkt der Verwendung ausgewählten aktiven Repräsentanten. Zudem wird die CLIENT_MOVE-Reihenfolge für den repräsentativen tcon beibehalten, da das Unregister mit alter IP gesendet wird, bevor cifs_swn_register() das Register mit neuer IP sendet.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.