CVE-2026-99180
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
28/10/2026
Last modified:
28/10/2026
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
unicode: free the map after a grace period<br />
<br />
generic_ci_d_hash() and generic_ci_d_compare() read sb->s_encoding and<br />
dereference the unicode map while a pathwalk in rcu mode holds nothing<br />
but rcu_read_lock(). The filesystems that use them, ext4, f2fs and<br />
tmpfs, drop the map with utf8_unload() from ->put_super(), which runs<br />
when the last reference to the mount goes away. A lookup that is still<br />
inside such a filesystem at that point reads a freed map.<br />
<br />
With a pathwalk held up in utf8_casefold_hash() while the last reference<br />
to a casefolded tmpfs goes away:<br />
<br />
BUG: KASAN: slab-use-after-free in utf8nlookup+0x74c/0x950<br />
Read of size 8 at addr ff110001030fe658 by task walker/98<br />
Call Trace:<br />
<br />
utf8nlookup+0x74c/0x950<br />
utf8byte+0x160/0x1560<br />
utf8_casefold_hash+0x167/0x230<br />
generic_ci_d_hash+0xdd/0x1c0<br />
link_path_walk+0x11ad/0x1d30<br />
path_lookupat+0x63/0xb00<br />
filename_lookup+0x1f1/0x5b0<br />
vfs_statx+0xd7/0x3b0<br />
[...]<br />
Allocated by task 94:<br />
__kmalloc_cache_noprof+0x249/0x560<br />
utf8_load+0x4e/0x570<br />
shmem_parse_opt_casefold.isra.0+0x92/0x270<br />
[...]<br />
Freed by task 97:<br />
kfree+0x1db/0x5b0<br />
shmem_put_super+0x72/0x170<br />
generic_shutdown_super+0x14c/0x530<br />
kill_anon_super+0x3a/0x60<br />
deactivate_locked_super+0x9c/0xf0<br />
cleanup_mnt+0x9f/0x130<br />
<br />
So far that has been hard to hit. umount(2) waits for a grace period<br />
in namespace_unlock() before it drops the mount, so only a mount whose<br />
last reference goes away elsewhere, like the close of a file or a chdir<br />
out of a lazily unmounted directory, can race a walker. So it is<br />
reachable.<br />
<br />
Delay the free until a grace period has passed. The map and the data<br />
table it holds a reference to then outlive any pathwalk that found the<br />
superblock before the mount went away. The reference on the data table<br />
module is dropped from the rcu callback as well. utf8-core is built in<br />
whenever CONFIG_UNICODE is set, so there is no module exit that would<br />
have to wait for the callbacks.<br />
<br />
Overlayfs points the s_encoding of an overlay at the map of its first<br />
layer without taking a reference of its own. That stays correct. The<br />
layer is held by the overlay, so its map is dropped only after the<br />
overlay is gone.


