CVE-2026-31446Linux内核ext4文件系统模块中存在一个高危的释放后重用(UAF)漏洞。该漏洞发生在文件系统卸载过程中,由于`ext4_unregister_sysfs`与`update_super_work`之间存在竞态条件。当`ext4_unregister_sysfs`调用`kobject_del`释放kobject后,并发的`ext4_notify_error_sysfs`函数仍可能尝试访问已释放的kernfs_node,导致内核崩溃或潜在的权限提升。攻击者需本地访问权限并配合用户交互才能触发此漏洞。
该漏洞的根因在于对ext4文件系统卸载序列的重排序引入了竞态窗口。之前的提交将`ext4_unregister_sysfs`移到了刷新`s_sb_upd_work`之前,以阻止新的错误工作被排队,但这导致了UAF。具体流程为:`ext4_put_super`执行卸载,调用`ext4_unregister_sysfs`,进而调用`kobject_del`将`kobj->sd`置为NULL并RCU释放内存。此时如果`update_super_work`正在运行,它会调用`ext4_notify_error_sysfs`,该函数内部调用`sysfs_notify`。`sysfs_notify`尝试获取`kn = kobj->sd`,此时`sd`指针可能已经失效,导致对已释放的kernfs_node进行`kernfs_get`操作,引发UAF。修复方案是在`ext4_notify_error_sysfs`中检查`s_kobj.state_in_sysfs`标志,并引入`s_error_notify_mutex`互斥锁来序列化通知与注销操作,防止TOCTOU竞态。