CVE-2026-31446CWE-416

CVE-2026-31446

High · published April 22, 2026

CVSS v3.1
7.8
EPSS
0%
Percentile
8.3
In the wild
Unconfirmed
What it is

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.

The record
Technical detail
CVSS v3.1
7.8 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00191 · 8.3th percentile
Weakness
CWE-416 · Use After Free
Published
2026-04-22T18:16Z
Affected products (19)
ProductVersionsFixed in
linux/linux_kernel≥ 5.10.114, < 5.115.11
linux/linux_kernel≥ 5.15.38, < 5.15.2035.15.203
linux/linux_kernel≥ 5.17.6, < 5.185.18
linux/linux_kernel≥ 5.18.1, < 6.1.1686.1.168
linux/linux_kernel≥ 6.2, < 6.6.1316.6.131
linux/linux_kernel≥ 6.7, < 6.12.806.12.80
linux/linux_kernel≥ 6.13, < 6.18.216.18.21
linux/linux_kernel≥ 6.19, < 6.19.116.19.11
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (10)
EPSS history
Timeline
  • 22 APR 13:53Z
    ext4: fix use-after-free in update_super_work when racing with umount
    cvelistv5