CVE-2025-40105
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
30/10/2025
Last modified:
30/10/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
vfs: Don&#39;t leak disconnected dentries on umount<br />
<br />
When user calls open_by_handle_at() on some inode that is not cached, we<br />
will create disconnected dentry for it. If such dentry is a directory,<br />
exportfs_decode_fh_raw() will then try to connect this dentry to the<br />
dentry tree through reconnect_path(). It may happen for various reasons<br />
(such as corrupted fs or race with rename) that the call to<br />
lookup_one_unlocked() in reconnect_one() will fail to find the dentry we<br />
are trying to reconnect and instead create a new dentry under the<br />
parent. Now this dentry will not be marked as disconnected although the<br />
parent still may well be disconnected (at least in case this<br />
inconsistency happened because the fs is corrupted and .. doesn&#39;t point<br />
to the real parent directory). This creates inconsistency in<br />
disconnected flags but AFAICS it was mostly harmless. At least until<br />
commit f1ee616214cb ("VFS: don&#39;t keep disconnected dentries on d_anon")<br />
which removed adding of most disconnected dentries to sb->s_anon list.<br />
Thus after this commit cleanup of disconnected dentries implicitely<br />
relies on the fact that dput() will immediately reclaim such dentries.<br />
However when some leaf dentry isn&#39;t marked as disconnected, as in the<br />
scenario described above, the reclaim doesn&#39;t happen and the dentries<br />
are "leaked". Memory reclaim can eventually reclaim them but otherwise<br />
they stay in memory and if umount comes first, we hit infamous "Busy<br />
inodes after unmount" bug. Make sure all dentries created under a<br />
disconnected parent are marked as disconnected as well.
Impact
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/20863bb7fbb016379f8227122edfabc5c799bc79
- https://git.kernel.org/stable/c/56094ad3eaa21e6621396cc33811d8f72847a834
- https://git.kernel.org/stable/c/620f3b0ede9c5cb4976cd0457d0b04ad551e5d6b
- https://git.kernel.org/stable/c/7e0c8aaf4e28918abded547a5147c7d52c4af7d2
- https://git.kernel.org/stable/c/8004d4b8cbf1bd68a23c160d57287e177c82cc69
- https://git.kernel.org/stable/c/b5abafd0aa8d7bcb935c8f91e4cfc2f2820759e4
- https://git.kernel.org/stable/c/cebfbf40056a4d858b2a3ca59a69936d599bd209
- https://git.kernel.org/stable/c/eadc49999fa994d6fbd70c332bd5d5051cc42261



