{"id":"CVE-2025-38652","state":"PUBLISHED","title":"f2fs: fix to avoid out-of-boundary access in devs.path","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nf2fs: fix to avoid out-of-boundary access in devs.path\n\n- touch /mnt/f2fs/012345678901234567890123456789012345678901234567890123\n- truncate -s $((1024*1024*1024)) \\\n  /mnt/f2fs/012345678901234567890123456789012345678901234567890123\n- touch /mnt/f2fs/file\n- truncate -s $((1024*1024*1024)) /mnt/f2fs/file\n- mkfs.f2fs /mnt/f2fs/012345678901234567890123456789012345678901234567890123 \\\n  -c /mnt/f2fs/file\n- mount /mnt/f2fs/012345678901234567890123456789012345678901234567890123 \\\n  /mnt/f2fs/loop\n\n[16937.192225] F2FS-fs (loop0): Mount Device [ 0]: /mnt/f2fs/012345678901234567890123456789012345678901234567890123\\xff\\x01,      511,        0 -    3ffff\n[16937.192268] F2FS-fs (loop0): Failed to find devices\n\nIf device path length equals to MAX_PATH_LEN, sbi->devs.path[] may\nnot end up w/ null character due to path array is fully filled, So\naccidently, fields locate after path[] may be treated as part of\ndevice path, result in parsing wrong device path.\n\nstruct f2fs_dev_info {\n...\n\tchar path[MAX_PATH_LEN];\n...\n};\n\nLet's add one byte space for sbi->devs.path[] to store null\ncharacter of device path string.","publishedAt":"2025-08-22T16:00:56.445Z","updatedAt":"2026-08-05T12:03:40.653Z","severity":{"score":7.3,"label":"High","version":"3.1","vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:H","source":"Linux"},"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"3c62be17d4f562f43fe1d03b48194399caa35aa5","status":"affected","lessThan":"dc0172c74bd9edaee7bea2ebb35f3dbd37a8ae80","versionType":"git"},{"version":"3c62be17d4f562f43fe1d03b48194399caa35aa5","status":"affected","lessThan":"1cf1ff15f262e8baf12201b270b6a79f9d119b2d","versionType":"git"},{"version":"3c62be17d4f562f43fe1d03b48194399caa35aa5","status":"affected","lessThan":"666b7cf6ac9aa074b8319a2b68cba7f2c30023f0","versionType":"git"},{"version":"3c62be17d4f562f43fe1d03b48194399caa35aa5","status":"affected","lessThan":"3466721f06edff834f99d9f49f23eabc6b2cb78e","versionType":"git"},{"version":"3c62be17d4f562f43fe1d03b48194399caa35aa5","status":"affected","lessThan":"345fc8d1838f3f8be7c8ed08d86a13dedef67136","versionType":"git"},{"version":"3c62be17d4f562f43fe1d03b48194399caa35aa5","status":"affected","lessThan":"70849d33130a2cf1d6010069ed200669c8651fbd","versionType":"git"},{"version":"3c62be17d4f562f43fe1d03b48194399caa35aa5","status":"affected","lessThan":"755427093e4294ac111c3f9e40d53f681a0fbdaa","versionType":"git"},{"version":"3c62be17d4f562f43fe1d03b48194399caa35aa5","status":"affected","lessThan":"1b1efa5f0e878745e94a98022e8edc675a87d78e","versionType":"git"},{"version":"3c62be17d4f562f43fe1d03b48194399caa35aa5","status":"affected","lessThan":"5661998536af52848cc4d52a377e90368196edea","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["fs/f2fs/f2fs.h"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"4.10","status":"affected"},{"version":"0","status":"unaffected","lessThan":"4.10","versionType":"semver"},{"version":"5.4.297","status":"unaffected","lessThanOrEqual":"5.4.*","versionType":"semver"},{"version":"5.10.241","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.190","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.148","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.102","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.42","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.15.10","status":"unaffected","lessThanOrEqual":"6.15.*","versionType":"semver"},{"version":"6.16.1","status":"unaffected","lessThanOrEqual":"6.16.*","versionType":"semver"},{"version":"6.17","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["fs/f2fs/f2fs.h"]}],"references":["https://git.kernel.org/stable/c/dc0172c74bd9edaee7bea2ebb35f3dbd37a8ae80","https://git.kernel.org/stable/c/1cf1ff15f262e8baf12201b270b6a79f9d119b2d","https://git.kernel.org/stable/c/666b7cf6ac9aa074b8319a2b68cba7f2c30023f0","https://git.kernel.org/stable/c/3466721f06edff834f99d9f49f23eabc6b2cb78e","https://git.kernel.org/stable/c/345fc8d1838f3f8be7c8ed08d86a13dedef67136","https://git.kernel.org/stable/c/70849d33130a2cf1d6010069ed200669c8651fbd","https://git.kernel.org/stable/c/755427093e4294ac111c3f9e40d53f681a0fbdaa","https://git.kernel.org/stable/c/1b1efa5f0e878745e94a98022e8edc675a87d78e","https://git.kernel.org/stable/c/5661998536af52848cc4d52a377e90368196edea","https://lists.debian.org/debian-lts-announce/2025/10/msg00008.html","https://lists.debian.org/debian-lts-announce/2025/10/msg00007.html"],"weaknesses":[],"ingestedAt":"2026-10-29T20:09:09.358Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2025/38xxx/CVE-2025-38652.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2025-38652","state":"PUBLISHED","datePublished":"2025-08-22T16:00:56.445Z","dateUpdated":"2026-08-05T12:03:40.653Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2025-04-16T04:51:24.030Z"},"containers":{"cna":{"title":"f2fs: fix to avoid out-of-boundary access in devs.path","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nf2fs: fix to avoid out-of-boundary access in devs.path\n\n- touch /mnt/f2fs/012345678901234567890123456789012345678901234567890123\n- truncate -s $((1024*1024*1024)) \\\n  /mnt/f2fs/012345678901234567890123456789012345678901234567890123\n- touch /mnt/f2fs/file\n- truncate -s $((1024*1024*1024)) /mnt/f2fs/file\n- mkfs.f2fs /mnt/f2fs/012345678901234567890123456789012345678901234567890123 \\\n  -c /mnt/f2fs/file\n- mount /mnt/f2fs/012345678901234567890123456789012345678901234567890123 \\\n  /mnt/f2fs/loop\n\n[16937.192225] F2FS-fs (loop0): Mount Device [ 0]: /mnt/f2fs/012345678901234567890123456789012345678901234567890123\\xff\\x01,      511,        0 -    3ffff\n[16937.192268] F2FS-fs (loop0): Failed to find devices\n\nIf device path length equals to MAX_PATH_LEN, sbi->devs.path[] may\nnot end up w/ null character due to path array is fully filled, So\naccidently, fields locate after path[] may be treated as part of\ndevice path, result in parsing wrong device path.\n\nstruct f2fs_dev_info {\n...\n\tchar path[MAX_PATH_LEN];\n...\n};\n\nLet's add one byte space for sbi->devs.path[] to store null\ncharacter of device path string."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"3c62be17d4f562f43fe1d03b48194399caa35aa5","status":"affected","lessThan":"dc0172c74bd9edaee7bea2ebb35f3dbd37a8ae80","versionType":"git"},{"version":"3c62be17d4f562f43fe1d03b48194399caa35aa5","status":"affected","lessThan":"1cf1ff15f262e8baf12201b270b6a79f9d119b2d","versionType":"git"},{"version":"3c62be17d4f562f43fe1d03b48194399caa35aa5","status":"affected","lessThan":"666b7cf6ac9aa074b8319a2b68cba7f2c30023f0","versionType":"git"},{"version":"3c62be17d4f562f43fe1d03b48194399caa35aa5","status":"affected","lessThan":"3466721f06edff834f99d9f49f23eabc6b2cb78e","versionType":"git"},{"version":"3c62be17d4f562f43fe1d03b48194399caa35aa5","status":"affected","lessThan":"345fc8d1838f3f8be7c8ed08d86a13dedef67136","versionType":"git"},{"version":"3c62be17d4f562f43fe1d03b48194399caa35aa5","status":"affected","lessThan":"70849d33130a2cf1d6010069ed200669c8651fbd","versionType":"git"},{"version":"3c62be17d4f562f43fe1d03b48194399caa35aa5","status":"affected","lessThan":"755427093e4294ac111c3f9e40d53f681a0fbdaa","versionType":"git"},{"version":"3c62be17d4f562f43fe1d03b48194399caa35aa5","status":"affected","lessThan":"1b1efa5f0e878745e94a98022e8edc675a87d78e","versionType":"git"},{"version":"3c62be17d4f562f43fe1d03b48194399caa35aa5","status":"affected","lessThan":"5661998536af52848cc4d52a377e90368196edea","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["fs/f2fs/f2fs.h"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"4.10","status":"affected"},{"version":"0","status":"unaffected","lessThan":"4.10","versionType":"semver"},{"version":"5.4.297","status":"unaffected","lessThanOrEqual":"5.4.*","versionType":"semver"},{"version":"5.10.241","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.190","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.148","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.102","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.42","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.15.10","status":"unaffected","lessThanOrEqual":"6.15.*","versionType":"semver"},{"version":"6.16.1","status":"unaffected","lessThanOrEqual":"6.16.*","versionType":"semver"},{"version":"6.17","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["fs/f2fs/f2fs.h"]}],"references":[{"url":"https://git.kernel.org/stable/c/dc0172c74bd9edaee7bea2ebb35f3dbd37a8ae80"},{"url":"https://git.kernel.org/stable/c/1cf1ff15f262e8baf12201b270b6a79f9d119b2d"},{"url":"https://git.kernel.org/stable/c/666b7cf6ac9aa074b8319a2b68cba7f2c30023f0"},{"url":"https://git.kernel.org/stable/c/3466721f06edff834f99d9f49f23eabc6b2cb78e"},{"url":"https://git.kernel.org/stable/c/345fc8d1838f3f8be7c8ed08d86a13dedef67136"},{"url":"https://git.kernel.org/stable/c/70849d33130a2cf1d6010069ed200669c8651fbd"},{"url":"https://git.kernel.org/stable/c/755427093e4294ac111c3f9e40d53f681a0fbdaa"},{"url":"https://git.kernel.org/stable/c/1b1efa5f0e878745e94a98022e8edc675a87d78e"},{"url":"https://git.kernel.org/stable/c/5661998536af52848cc4d52a377e90368196edea"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:L/A:H","baseScore":7.3,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The only trigger is `mount(2)` of a crafted f2fs image whose superblock `devs[].path` is a full 64 bytes with no terminator (`get_tree_bdev` → `f2fs_fill_super` → `f2fs_scan_devices`), and the resulting disclosure is read back locally via `/proc/fs/f2fs/<dev>/disk_map`. No network or peer-supplied data reaches this code; between Physical (removable media) and Local, the higher-severity Local applies.\nAC:L - The attacker fully controls the on-disk `f2fs_device.path[64]` bytes and the adjacent `total_segments` value, so filling the path completely deterministically leaves `sbi->devs[i].path` unterminated on every mount — exactly as the reporter demonstrated. There is no race, no memory-layout guessing, and the trailing struct fields (`start_blk`/`end_blk`) are deterministically derived from segment counts the attacker chooses.\nPR:N - The attacker needs no account or privileges on the victim system — only delivery of a malicious f2fs image on an SD card, USB stick, or disk image that a privileged auto-mount daemon (Android vold, udisks2) or administrator later processes, which is the most severe reasonable scenario for f2fs given its role as the standard Android/removable-media filesystem.\nUI:R - f2fs does not set `FS_USERNS_MOUNT`, so mounting requires `CAP_SYS_ADMIN` in the initial user namespace; the crafted image therefore reaches the vulnerable code only when a victim inserts the media or mounts the image, and that mount action constitutes user interaction.\nS:U - The over-read, the leaked slab contents, and any resulting fault all remain within the kernel's own security authority on the host performing the mount; no VM, container, or IOMMU boundary is crossed.\nC:H - The unterminated string is read until an arbitrary in-memory NUL, so the length is determined by heap contents rather than by any bound: the over-read spills into `total_segments`/`start_blk`/`end_blk`, into `nr_blkz` and the `blkz_seq` kernel heap pointer on zoned devices, and past the end of the `kzalloc`'d `f2fs_dev_info` array at its last element. Those bytes are printed verbatim into dmesg and exported through the world-readable 0444 `/proc/fs/f2fs/<dev>/disk_map`, so adjacent slab data and a kernel heap pointer (defeating KASLR) are disclosed to unprivileged userspace and can be re-read at will.\nI:L - The mis-parsed string is handed to `bdev_file_open_by_path()`, so f2fs can attach to and write filesystem data onto a block device whose path exceeds the 64-byte on-disk field — a target the format otherwise cannot name — corrupting that device's contents. There is no out-of-bounds write or attacker-controlled store, so the modification is limited rather than arbitrary.\nA:H - The strlen/vsnprintf walk past the end of the slab object faults hard on hardened configurations (KFENCE guard page, `panic_on_warn` with a KASAN slab-out-of-bounds report) and can read into unmapped memory at a slab-page boundary, oopsing the mounting task. Even without a fault, the mis-parsed device path aborts the mount with \"Failed to find devices\", leaving the volume — typically the device's primary Android/SD-card storage — unusable."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-08-05T12:03:40.653Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.10","versionEndExcluding":"5.4.297"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.10","versionEndExcluding":"5.10.241"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.10","versionEndExcluding":"5.15.190"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.10","versionEndExcluding":"6.1.148"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.10","versionEndExcluding":"6.6.102"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.10","versionEndExcluding":"6.12.42"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.10","versionEndExcluding":"6.15.10"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.10","versionEndExcluding":"6.16.1"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.10","versionEndExcluding":"6.17"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"title":"CVE Program Container","references":[{"url":"https://lists.debian.org/debian-lts-announce/2025/10/msg00008.html"},{"url":"https://lists.debian.org/debian-lts-announce/2025/10/msg00007.html"}],"providerMetadata":{"shortName":"CVE","orgId":"af854a3a-2127-422b-91ae-364da2661108","dateUpdated":"2025-11-03T17:40:45.643Z"}}]}}}