CVE-2025-37785
Severity CVSS v4.0:
Pending analysis
Type:
CWE-125
Out-of-bounds Read
Publication date:
18/04/2025
Last modified:
03/11/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
ext4: fix OOB read when checking dotdot dir<br />
<br />
Mounting a corrupted filesystem with directory which contains &#39;.&#39; dir<br />
entry with rec_len == block size results in out-of-bounds read (later<br />
on, when the corrupted directory is removed).<br />
<br />
ext4_empty_dir() assumes every ext4 directory contains at least &#39;.&#39;<br />
and &#39;..&#39; as directory entries in the first data block. It first loads<br />
the &#39;.&#39; dir entry, performs sanity checks by calling ext4_check_dir_entry()<br />
and then uses its rec_len member to compute the location of &#39;..&#39; dir<br />
entry (in ext4_next_entry). It assumes the &#39;..&#39; dir entry fits into the<br />
same data block.<br />
<br />
If the rec_len of &#39;.&#39; is precisely one block (4KB), it slips through the<br />
sanity checks (it is considered the last directory entry in the data<br />
block) and leaves "struct ext4_dir_entry_2 *de" point exactly past the<br />
memory slot allocated to the data block. The following call to<br />
ext4_check_dir_entry() on new value of de then dereferences this pointer<br />
which results in out-of-bounds mem access.<br />
<br />
Fix this by extending __ext4_check_dir_entry() to check for &#39;.&#39; dir<br />
entries that reach the end of data block. Make sure to ignore the phony<br />
dir entries for checksum (by checking name_len for non-zero).<br />
<br />
Note: This is reported by KASAN as use-after-free in case another<br />
structure was recently freed from the slot past the bound, but it is<br />
really an OOB read.<br />
<br />
This issue was found by syzkaller tool.<br />
<br />
Call Trace:<br />
[ 38.594108] BUG: KASAN: slab-use-after-free in __ext4_check_dir_entry+0x67e/0x710<br />
[ 38.594649] Read of size 2 at addr ffff88802b41a004 by task syz-executor/5375<br />
[ 38.595158]<br />
[ 38.595288] CPU: 0 UID: 0 PID: 5375 Comm: syz-executor Not tainted 6.14.0-rc7 #1<br />
[ 38.595298] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014<br />
[ 38.595304] Call Trace:<br />
[ 38.595308] <br />
[ 38.595311] dump_stack_lvl+0xa7/0xd0<br />
[ 38.595325] print_address_description.constprop.0+0x2c/0x3f0<br />
[ 38.595339] ? __ext4_check_dir_entry+0x67e/0x710<br />
[ 38.595349] print_report+0xaa/0x250<br />
[ 38.595359] ? __ext4_check_dir_entry+0x67e/0x710<br />
[ 38.595368] ? kasan_addr_to_slab+0x9/0x90<br />
[ 38.595378] kasan_report+0xab/0xe0<br />
[ 38.595389] ? __ext4_check_dir_entry+0x67e/0x710<br />
[ 38.595400] __ext4_check_dir_entry+0x67e/0x710<br />
[ 38.595410] ext4_empty_dir+0x465/0x990<br />
[ 38.595421] ? __pfx_ext4_empty_dir+0x10/0x10<br />
[ 38.595432] ext4_rmdir.part.0+0x29a/0xd10<br />
[ 38.595441] ? __dquot_initialize+0x2a7/0xbf0<br />
[ 38.595455] ? __pfx_ext4_rmdir.part.0+0x10/0x10<br />
[ 38.595464] ? __pfx___dquot_initialize+0x10/0x10<br />
[ 38.595478] ? down_write+0xdb/0x140<br />
[ 38.595487] ? __pfx_down_write+0x10/0x10<br />
[ 38.595497] ext4_rmdir+0xee/0x140<br />
[ 38.595506] vfs_rmdir+0x209/0x670<br />
[ 38.595517] ? lookup_one_qstr_excl+0x3b/0x190<br />
[ 38.595529] do_rmdir+0x363/0x3c0<br />
[ 38.595537] ? __pfx_do_rmdir+0x10/0x10<br />
[ 38.595544] ? strncpy_from_user+0x1ff/0x2e0<br />
[ 38.595561] __x64_sys_unlinkat+0xf0/0x130<br />
[ 38.595570] do_syscall_64+0x5b/0x180<br />
[ 38.595583] entry_SYSCALL_64_after_hwframe+0x76/0x7e
Impact
Base Score 3.x
7.10
Severity 3.x
HIGH
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 2.6.19 (including) | 5.10.236 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (including) | 5.15.180 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.16 (including) | 6.1.134 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 (including) | 6.6.87 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 (including) | 6.12.23 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.13 (including) | 6.13.11 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.14 (including) | 6.14.2 (excluding) |
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/14da7dbecb430e35b5889da8dae7bef33173b351
- https://git.kernel.org/stable/c/52a5509ab19a5d3afe301165d9b5787bba34d842
- https://git.kernel.org/stable/c/53bc45da8d8da92ec07877f5922b130562eb4b00
- https://git.kernel.org/stable/c/89503e5eae64637d0fa2218912b54660effe7d93
- https://git.kernel.org/stable/c/ac28c5684c1cdab650a7e5065b19e91577d37a4b
- https://git.kernel.org/stable/c/b47584c556444cf7acb66b26a62cbc348eb92b78
- https://git.kernel.org/stable/c/b7531a4f99c3887439d778afaf418d1a01a5f01b
- https://git.kernel.org/stable/c/d5e206778e96e8667d3bde695ad372c296dc9353
- https://git.kernel.org/stable/c/e47f472a664d70a3d104a6c2a035cdff55a719b4
- https://lists.debian.org/debian-lts-announce/2025/05/msg00030.html
- https://lists.debian.org/debian-lts-announce/2025/05/msg00045.html



