CVE-2025-40271 in Linux
Zusammenfassung
von VulDB • 16.05.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
fs/proc: Behebung eines Use-After-Free (UAF) in proc_readdir_de()
Pde wird aus dem rbtree des Unterverzeichnisses durch rb_erase() entfernt, aber der Knoten wird nicht auf EMPTY gesetzt, was zu einem UAF-Zugriff führen kann. Wir sollten RB_CLEAR_NODE() verwenden, um den entfernten Knoten auf EMPTY zu setzen, damit pde_subdir_next() NULL zurückgibt und UAF-Zugriffe vermieden werden.
Wir haben ein UAF-Problem beim Einsatz von stress-ng-Tests festgestellt, wobei die Testfälle getdent und tun gleichzeitig ausgeführt werden müssen. Die Schritte zur Reproduktion des Problems sind wie folgt:
1) Verwenden Sie getdent, um das Verzeichnis /proc/pid/net/dev_snmp6/ zu durchlaufen, und das aktuelle pde ist tun3;
2) Im [Zeitfenster] wird das netdevice tun3 und tun2 deregistriert und aus dem rbtree entfernt. Zuerst wird tun3 entfernt, dann tun2. Das pde(tun2) wird an den Slab freigegeben;
3) Der getdent-Prozess wird fortgesetzt, dann gibt pde_subdir_next() das pde(tun2) zurück, das freigegeben wurde, was zu einem UAF-Zugriff führt.
CPU 0 | CPU 1 ------------------------------------------------------------------------- Verzeichnis /proc/pid/net/dev_snmp6/ durchlaufen | unregister_netdevice(tun->dev) //tun3 tun2 sys_getdents64() | iterate_dir() | proc_readdir() | proc_readdir_de() | snmp6_unregister_dev() pde_get(de); | proc_remove() read_unlock(&proc_subdir_lock); | remove_proc_subtree() | write_lock(&proc_subdir_lock); [Zeitfenster] | rb_erase(&root->subdir_node, &parent->subdir);
| write_unlock(&proc_subdir_lock); read_lock(&proc_subdir_lock); | next = pde_subdir_next(de); | pde_put(de); | de = next; //UAF |
rbtree von dev_snmp6 | pde(tun3) / \ NULL pde(tun2)
If you want to get the best quality for vulnerability data then you always have to consider VulDB.