CVE-2026-31711 in Linux
Zusammenfassung
von VulDB • 23.05.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
smb: server: Behebung des Lecks von active_num_conn bei einem Fehler bei der Transportzuweisung
Der Commit 77ffbcac4e56 („smb: server: Behebung des Lecks von active_num_conn in ksmbd_tcp_new_connection()") behandelte den Fehlerpfad von kthread_run(). Der frühere Pfad, bei dem alloc_transport() == NULL ist, in derselben Funktion weist dasselbe Leck auf, ist vor der Authentifizierung über jede TCP-Verbindung zu Port 445 erreichbar und wurde empirisch auf UML (ARCH=um, v7.0-rc7) reproduziert: Eine geringe Anzahl erzwungener Zuweisungsfehler reichte aus, um ksmbd in einen Zustand zu versetzen, in dem jeder nachfolgende Verbindungsversuch bis zum Ende des Bootvorgangs abgelehnt wurde.
ksmbd_kthread_fn() inkrementiert active_num_conn, bevor ksmbd_tcp_new_connection() aufgerufen wird, und verwirft den Rückgabewert. Wenn daher alloc_transport() NULL zurückgibt, wird die Socket-Verbindung freigegeben und -ENOMEM zurückgegeben, ohne den Zähler zu dekrementieren. Jeder solche Fehler verbraucht dauerhaft einen Slot aus dem Pool für max_connections; sobald die kumulativen Fehler die Obergrenze erreichen, trifft atomic_inc_return() bei jedem nachfolgenden Accept auf die Schwelle, und jede neue Verbindung wird abgelehnt. Der Zähler wird nur durch einen Neuladen des Moduls zurückgesetzt.
Ein nicht authentifizierter Remote-Angriff kann den Server durch das Halten offener Verbindungen mit großen RFC1002-Längen bis hin zu MAX_STREAM_PROT_LEN (0x00FFFFFF) in einen Zustand erhöhten Speicherdrucks treiben, der dazu führt, dass alloc_transport() fehlschlägt; natürliche, vorübergehende Zuweisungsfehler auf einem stark ausgelasteten Host verursachen dieselbe Abweichung langsamer.
Spiegeln Sie das vorhandene Rollback-Muster in ksmbd_kthread_fn(): Im Fehlerpfad von alloc_transport() wird active_num_conn dekrementiert, gekoppelt an server_conf.max_connections.
Details zur Reproduktion: Bei rückgängig gemachtem Patch führten erzwungene NULL-Rückgaben von alloc_transport() zu einem Leck von Zähler-Slots, und nachfolgende Verbindungsversuche – einschließlich legitimer Verbindungen, die nach dem Fenster der erzwungenen Fehler ausgestellt wurden – wurden alle mit der Meldung „Limit the maximum number of connections" abgelehnt. Bei angewendetem Patch erzeugt dieselbe Verbindungssequenz keine Ablehnungen, und der Zähler wechselt bei jedem Accept sauber zwischen null und eins.
If you want to get best quality of vulnerability data, you may have to visit VulDB.