HIGH
ext4 Sysfs UAF
CVE-2026-31446
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
KernelScan AI7.8HIGH
01Description
In the Linux kernel, the following vulnerability has been resolved: ext4: fix use-after-free in update_super_work when racing with umount Commit b98535d09179 ("ext4: fix bug_on in start_this_handle during umount filesystem") moved ext4_unregister_sysfs() before flushing s_sb_upd_work to prevent new error work from being queued via /proc/fs/ext4/xx/mb_groups reads during unmount. However, this introduced a use-after-free because update_super_work calls ext4_notify_error_sysfs() -> sysfs_notify() which accesses the kobject's kernfs_node after it has been freed by kobject_del() in ext4_unregister_sysfs(): update_super_work ext4_put_super ----------------- -------------- ext4_unregister_sysfs(sb) kobject_del(&sbi->s_kobj) __kobject_del() sysfs_remove_dir() kobj->sd = NULL sysfs_put(sd) kernfs_put() // RCU free ext4_notify_error_sysfs(sbi) sysfs_notify(&sbi->s_kobj) kn = kobj->sd // stale pointer kernfs_get(kn) // UAF on freed kernfs_node ext4_journal_destroy() flush_work(&sbi->s_sb_upd_work) Instead of reordering the teardown sequence, fix this by making ext4_notify_error_sysfs() detect that sysfs has already been torn down by checking s_kobj.state_in_sysfs, and skipping the sysfs_notify() call in that case. A dedicated mutex (s_error_notify_mutex) serializes ext4_notify_error_sysfs() against kobject_del() in ext4_unregister_sysfs() to prevent TOCTOU races where the kobject could be deleted between the state_in_sysfs check and the sysfs_notify() call.
02KernelScan AI Analysis
Risk summary
Local users with low privileges can trigger a use-after-free in the ext4 filesystem during unmount operations. This can lead to kernel memory corruption, privilege escalation, or system crashes when racing filesystem unmount with error notification work.
Vulnerability analysis
The vulnerability occurs due to a race condition between ext4_put_super() (unmount path) and update_super_work() (error notification work). The root cause is that ext4_unregister_sysfs() calls kobject_del() which frees the kernfs_node via RCU, but the concurrent update_super_work can still call ext4_notify_error_sysfs() -> sysfs_notify() which accesses the freed kernfs_node through kobj->sd. The fix adds a mutex (s_error_notify_mutex) to serialize access and checks s_kobj.state_in_sysfs before calling sysfs_notify() to detect if sysfs has been torn down. This prevents the use-after-free by ensuring the kobject state is checked atomically with respect to kobject_del().
03Fix Versions
| Branch | Fixed in | Patch commit |
|---|---|---|
| 5.11 | 5.11 | c4d829737329 |
| 5.15 | 5.15.203 | c8fe17a1b308 |
| 5.18 | 5.18 | 9449f99ba04f |
| 6.1 | 6.1.168 | 034053378dd8 |
| 6.12 | 6.12.80 | 08b10e6f37fc |
| 6.18 | 6.18.21 | d15e4b0a4185 |
| 6.19 | 6.19.11 | — |
| 6.6 | 6.6.131 | c97e282f7bfd |
| mainline | 7.0 | — |