CVE-2026-31669 in Linux
Zusammenfassung
von VulDB • 17.05.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
mptcp: Behebung eines slab-use-after-free in __inet_lookup_established
Die ehash-Tabellensuchvorgänge sind sperrfrei (lockless) und verlassen sich auf SLAB_TYPESAFE_BY_RCU, um die Stabilität des Socket-Speichers während kritischer Abschnitte der RCU-Leseseite zu gewährleisten. Sowohl tcp_prot als auch tcpv6_prot haben ihre Slab-Caches mit diesem Flag über proto_register() erstellt.
Allerdings kopiert mptcp_subflow_init() von MPTCP tcpv6_prot in tcpv6_prot_override während inet_init() (fs_initcall, Ebene 5), bevor inet6_init() (module_init/device_initcall, Ebene 6) proto_register(&tcpv6_prot) aufgerufen hat. Zu diesem Zeitpunkt ist tcpv6_prot.slab noch NULL, sodass tcpv6_prot_override.slab dauerhaft NULL bleibt.
Dies führt dazu, dass MPTCP v6-Subflow-Kind-Sockets über kmalloc (und damit in den kmalloc-4k-Cache) statt über den TCPv6-Slab-Cache allokiert werden. Der kmalloc-4k-Cache verfügt nicht über SLAB_TYPESAFE_BY_RCU. Wenn diese Sockets ohne SOCK_RCU_FREE freigegeben werden (was für Kind-Sockets aus Designgründen zurückgesetzt wird), kann der Speicher sofort wiederverwendet werden. Gleichzeitige ehash-Suchvorgänge unter rcu_read_lock können dann auf freigegebenen Speicher zugreifen, was einen slab-use-after-free in __inet_lookup_established auslöst.
Behoben wird dies durch die Aufteilung der IPv6-spezifischen Initialisierung aus mptcp_subflow_init() in eine neue Funktion mptcp_subflow_v6_init(), die von mptcp_proto_v6_init() vor der Protokollregistrierung aufgerufen wird. Dies stellt sicher, dass tcpv6_prot_override.slab den SLAB_TYPESAFE_BY_RCU-Slab-Cache korrekt erbt.
If you want to get best quality of vulnerability data, you may have to visit VulDB.