CVE-2023-53311
Severity CVSS v4.0:
Pending analysis
Type:
CWE-416
Use After Free
Publication date:
16/09/2025
Last modified:
14/01/2026
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
nilfs2: fix use-after-free of nilfs_root in dirtying inodes via iput<br />
<br />
During unmount process of nilfs2, nothing holds nilfs_root structure after<br />
nilfs2 detaches its writer in nilfs_detach_log_writer(). Previously,<br />
nilfs_evict_inode() could cause use-after-free read for nilfs_root if<br />
inodes are left in "garbage_list" and released by nilfs_dispose_list at<br />
the end of nilfs_detach_log_writer(), and this bug was fixed by commit<br />
9b5a04ac3ad9 ("nilfs2: fix use-after-free bug of nilfs_root in<br />
nilfs_evict_inode()").<br />
<br />
However, it turned out that there is another possibility of UAF in the<br />
call path where mark_inode_dirty_sync() is called from iput():<br />
<br />
nilfs_detach_log_writer()<br />
nilfs_dispose_list()<br />
iput()<br />
mark_inode_dirty_sync()<br />
__mark_inode_dirty()<br />
nilfs_dirty_inode()<br />
__nilfs_mark_inode_dirty()<br />
nilfs_load_inode_block() --> causes UAF of nilfs_root struct<br />
<br />
This can happen after commit 0ae45f63d4ef ("vfs: add support for a<br />
lazytime mount option"), which changed iput() to call<br />
mark_inode_dirty_sync() on its final reference if i_state has I_DIRTY_TIME<br />
flag and i_nlink is non-zero.<br />
<br />
This issue appears after commit 28a65b49eb53 ("nilfs2: do not write dirty<br />
data after degenerating to read-only") when using the syzbot reproducer,<br />
but the issue has potentially existed before.<br />
<br />
Fix this issue by adding a "purging flag" to the nilfs structure, setting<br />
that flag while disposing the "garbage_list" and checking it in<br />
__nilfs_mark_inode_dirty().<br />
<br />
Unlike commit 9b5a04ac3ad9 ("nilfs2: fix use-after-free bug of nilfs_root<br />
in nilfs_evict_inode()"), this patch does not rely on ns_writer to<br />
determine whether to skip operations, so as not to break recovery on<br />
mount. The nilfs_salvage_orphan_logs routine dirties the buffer of<br />
salvaged data before attaching the log writer, so changing<br />
__nilfs_mark_inode_dirty() to skip the operation when ns_writer is NULL<br />
will cause recovery write to fail. The purpose of using the cleanup-only<br />
flag is to allow for narrowing of such conditions.
Impact
Base Score 3.x
7.80
Severity 3.x
HIGH
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.0 (including) | 4.14.323 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.15 (including) | 4.19.292 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.20 (including) | 5.4.254 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.5 (including) | 5.10.191 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (including) | 5.15.127 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.16 (including) | 6.1.46 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 (including) | 6.4.11 (excluding) |
| cpe:2.3:o:linux:linux_kernel:6.5:rc1:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:6.5:rc2:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:6.5:rc3:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:6.5:rc4:*:*:*:*:*:* | ||
| cpe:2.3:o:linux:linux_kernel:6.5:rc5:*:*:*:*:*:* |
To consult the complete list of CPE names with products and versions, see this page
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/11afd67f1b3c28eb216e50a3ca8dbcb69bb71793
- https://git.kernel.org/stable/c/3645510cf926e6af2f4d44899370d7e5331c93bd
- https://git.kernel.org/stable/c/37207240872456fbab44a110bde6640445233963
- https://git.kernel.org/stable/c/5828d5f5dc877dcfdd7b23102e978e2ecfd86d82
- https://git.kernel.org/stable/c/7532ff6edbf5242376b24a95a2fefb59bb653e5a
- https://git.kernel.org/stable/c/a3c3b4cbf9b8554120fb230e6516e980c6277487
- https://git.kernel.org/stable/c/d2c539c216cce74837a9cf5804eb205939b82227
- https://git.kernel.org/stable/c/f8654743a0e6909dc634cbfad6db6816f10f3399



