{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2025-38577", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2025-04-16T04:51:24.025Z", "datePublished": "2025-08-19T17:03:00.534Z", "dateUpdated": "2026-08-05T12:03:04.492Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T12:03:04.492Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nf2fs: fix to avoid panic in f2fs_evict_inode\n\nAs syzbot [1] reported as below:\n\nR10: 0000000000000100 R11: 0000000000000206 R12: 00007ffe17473450\nR13: 00007f28b1c10854 R14: 000000000000dae5 R15: 00007ffe17474520\n \n---[ end trace 0000000000000000 ]---\n==================================================================\nBUG: KASAN: use-after-free in __list_del_entry_valid+0xa6/0x130 lib/list_debug.c:62\nRead of size 8 at addr ffff88812d962278 by task syz-executor/564\n\nCPU: 1 PID: 564 Comm: syz-executor Tainted: G W 6.1.129-syzkaller #0\nHardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 02/12/2025\nCall Trace:\n \n __dump_stack+0x21/0x24 lib/dump_stack.c:88\n dump_stack_lvl+0xee/0x158 lib/dump_stack.c:106\n print_address_description+0x71/0x210 mm/kasan/report.c:316\n print_report+0x4a/0x60 mm/kasan/report.c:427\n kasan_report+0x122/0x150 mm/kasan/report.c:531\n __asan_report_load8_noabort+0x14/0x20 mm/kasan/report_generic.c:351\n __list_del_entry_valid+0xa6/0x130 lib/list_debug.c:62\n __list_del_entry include/linux/list.h:134 [inline]\n list_del_init include/linux/list.h:206 [inline]\n f2fs_inode_synced+0xf7/0x2e0 fs/f2fs/super.c:1531\n f2fs_update_inode+0x74/0x1c40 fs/f2fs/inode.c:585\n f2fs_update_inode_page+0x137/0x170 fs/f2fs/inode.c:703\n f2fs_write_inode+0x4ec/0x770 fs/f2fs/inode.c:731\n write_inode fs/fs-writeback.c:1460 [inline]\n __writeback_single_inode+0x4a0/0xab0 fs/fs-writeback.c:1677\n writeback_single_inode+0x221/0x8b0 fs/fs-writeback.c:1733\n sync_inode_metadata+0xb6/0x110 fs/fs-writeback.c:2789\n f2fs_sync_inode_meta+0x16d/0x2a0 fs/f2fs/checkpoint.c:1159\n block_operations fs/f2fs/checkpoint.c:1269 [inline]\n f2fs_write_checkpoint+0xca3/0x2100 fs/f2fs/checkpoint.c:1658\n kill_f2fs_super+0x231/0x390 fs/f2fs/super.c:4668\n deactivate_locked_super+0x98/0x100 fs/super.c:332\n deactivate_super+0xaf/0xe0 fs/super.c:363\n cleanup_mnt+0x45f/0x4e0 fs/namespace.c:1186\n __cleanup_mnt+0x19/0x20 fs/namespace.c:1193\n task_work_run+0x1c6/0x230 kernel/task_work.c:203\n exit_task_work include/linux/task_work.h:39 [inline]\n do_exit+0x9fb/0x2410 kernel/exit.c:871\n do_group_exit+0x210/0x2d0 kernel/exit.c:1021\n __do_sys_exit_group kernel/exit.c:1032 [inline]\n __se_sys_exit_group kernel/exit.c:1030 [inline]\n __x64_sys_exit_group+0x3f/0x40 kernel/exit.c:1030\n x64_sys_call+0x7b4/0x9a0 arch/x86/include/generated/asm/syscalls_64.h:232\n do_syscall_x64 arch/x86/entry/common.c:51 [inline]\n do_syscall_64+0x4c/0xa0 arch/x86/entry/common.c:81\n entry_SYSCALL_64_after_hwframe+0x68/0xd2\nRIP: 0033:0x7f28b1b8e169\nCode: Unable to access opcode bytes at 0x7f28b1b8e13f.\nRSP: 002b:00007ffe174710a8 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7\nRAX: ffffffffffffffda RBX: 00007f28b1c10879 RCX: 00007f28b1b8e169\nRDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000001\nRBP: 0000000000000002 R08: 00007ffe1746ee47 R09: 00007ffe17472360\nR10: 0000000000000009 R11: 0000000000000246 R12: 00007ffe17472360\nR13: 00007f28b1c10854 R14: 000000000000dae5 R15: 00007ffe17474520\n \n\nAllocated by task 569:\n kasan_save_stack mm/kasan/common.c:45 [inline]\n kasan_set_track+0x4b/0x70 mm/kasan/common.c:52\n kasan_save_alloc_info+0x25/0x30 mm/kasan/generic.c:505\n __kasan_slab_alloc+0x72/0x80 mm/kasan/common.c:328\n kasan_slab_alloc include/linux/kasan.h:201 [inline]\n slab_post_alloc_hook+0x4f/0x2c0 mm/slab.h:737\n slab_alloc_node mm/slub.c:3398 [inline]\n slab_alloc mm/slub.c:3406 [inline]\n __kmem_cache_alloc_lru mm/slub.c:3413 [inline]\n kmem_cache_alloc_lru+0x104/0x220 mm/slub.c:3429\n alloc_inode_sb include/linux/fs.h:3245 [inline]\n f2fs_alloc_inode+0x2d/0x340 fs/f2fs/super.c:1419\n alloc_inode fs/inode.c:261 [inline]\n iget_locked+0x186/0x880 fs/inode.c:1373\n f2fs_iget+0x55/0x4c60 fs/f2fs/inode.c:483\n f2fs_lookup+0x366/0xab0 fs/f2fs/namei.c:487\n __lookup_slow+0x2a3/0x3d0 fs/namei.c:1690\n lookup_slow+0x57/0x70 fs/namei.c:1707\n walk_component+0x2e6/0x410 fs/namei\n---truncated---" } ], "metrics": [ { "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 7.8, "baseSeverity": "HIGH" }, "scenarios": [ { "lang": "en", "value": "AV:L - The entire trigger sequence is local filesystem syscalls — unlink/rename on a mounted f2fs volume to force `f2fs_evict_inode()`, then sync/fsync (or ordinary background writeback) to drive the checkpoint that consumes the stale `gdirty_list` entry. No network protocol or remote peer data is involved.\nAC:L - Once the crafted f2fs image is mounted, the attacker fully controls the on-disk node/dirent inconsistency that makes both `f2fs_truncate()` and `f2fs_update_inode_page()` fail, so the dangling list entry is produced deterministically by their own unlink, and they fire the use side at will via sync(2)-driven checkpoint; syzbot ships a C reproducer and there is no race or memory layout outside attacker control.\nPR:L - No capability check exists anywhere on the path from unlink(2)/sync(2) to `f2fs_evict_inode()` and `f2fs_sync_inode_meta()`; any unprivileged user with access to the f2fs volume (Android /data, vold-mounted adoptable storage or SD card, udisks2-automounted removable media, a loop-mounted image in a privileged container) triggers both the free and the subsequent use.\nUI:N - The malicious f2fs volume is mounted by vold/udisks2 automount infrastructure with no human action, and the attacker then performs every step alone with ordinary file operations; the use-after-free is additionally fired by the kernel's own writeback/checkpoint kworker without any victim involvement.\nS:U - The freed `f2fs_inode_cache` object and the corrupted `sbi->inode_list[DIRTY_META]` are kernel slab structures in the same security authority as the attacking process; no VM, IOMMU, or sandbox boundary is crossed.\nC:H - `f2fs_sync_inode_meta()` treats the freed inode as live — `f2fs_update_inode()` reads i_mode, i_uid/i_gid, i_size, timestamps, xattr nid, extent and compression fields out of the freed object and persists them into on-disk inode metadata that the attacker can read back, and `__list_del_entry_valid()` reads stale list pointers, giving a groomable arbitrary kernel-memory read primitive.\nI:H - `igrab()` increments a refcount inside freed memory, `list_del_init()` in `f2fs_inode_synced()` writes kernel pointers into the freed (reallocatable) slot, `sync_inode_metadata()` performs an indirect call through `inode->i_sb->s_op->write_inode` read from freed memory, and the trailing `iput()` can double-free — a classic UAF write and control-flow-hijack primitive, with the f2fs inode slab sprayable at will by creating files.\nA:H - The reported consequence is a KASAN-detected use-after-free with list corruption in `__list_del_entry_valid()` during checkpoint, and with CONFIG_F2FS_CHECK_FS the `f2fs_bug_on(FI_DIRTY_INODE)` is a hard BUG_ON producing an immediate kernel panic (the commit title's \"avoid panic\"); either way the machine oopses and the condition is repeatedly triggerable." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "fs/f2fs/inode.c" ], "versions": [ { "version": "0f18b462b2e5aff64b8638e8a47284b907351ef3", "lessThan": "15df59809c54fbd687cdf27efbd2103a937459be", "status": "affected", "versionType": "git" }, { "version": "0f18b462b2e5aff64b8638e8a47284b907351ef3", "lessThan": "9535e440fe5bc6c5ac7cfb407e53bf788b8bf8d4", "status": "affected", "versionType": "git" }, { "version": "0f18b462b2e5aff64b8638e8a47284b907351ef3", "lessThan": "5cd99d5aa3d39086bdb53eb5c52df16e98b101a0", "status": "affected", "versionType": "git" }, { "version": "0f18b462b2e5aff64b8638e8a47284b907351ef3", "lessThan": "4732ca17c17f5062426cfa982f43593e6b81963b", "status": "affected", "versionType": "git" }, { "version": "0f18b462b2e5aff64b8638e8a47284b907351ef3", "lessThan": "880ef748e78a1eb7df2d8e11a9ef21e98bcaabe5", "status": "affected", "versionType": "git" }, { "version": "0f18b462b2e5aff64b8638e8a47284b907351ef3", "lessThan": "97df495d754116c8c28ac6a4112f831727bde887", "status": "affected", "versionType": "git" }, { "version": "0f18b462b2e5aff64b8638e8a47284b907351ef3", "lessThan": "9bbfe83924946552c4c513099c0e8c83af76311a", "status": "affected", "versionType": "git" }, { "version": "0f18b462b2e5aff64b8638e8a47284b907351ef3", "lessThan": "42f9ea16aea8b49febaa87950a006a1792209f38", "status": "affected", "versionType": "git" }, { "version": "0f18b462b2e5aff64b8638e8a47284b907351ef3", "lessThan": "a509a55f8eecc8970b3980c6f06886bbff0e2f68", "status": "affected", "versionType": "git" } ] }, { "product": "Linux", "vendor": "Linux", "defaultStatus": "affected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "fs/f2fs/inode.c" ], "versions": [ { "version": "4.8", "status": "affected" }, { "version": "0", "lessThan": "4.8", "status": "unaffected", "versionType": "semver" }, { "version": "5.4.297", "lessThanOrEqual": "5.4.*", "status": "unaffected", "versionType": "semver" }, { "version": "5.10.241", "lessThanOrEqual": "5.10.*", "status": "unaffected", "versionType": "semver" }, { "version": "5.15.190", "lessThanOrEqual": "5.15.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.1.148", "lessThanOrEqual": "6.1.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.6.102", "lessThanOrEqual": "6.6.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.12.42", "lessThanOrEqual": "6.12.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.15.10", "lessThanOrEqual": "6.15.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.16.1", "lessThanOrEqual": "6.16.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.17", "lessThanOrEqual": "*", "status": "unaffected", "versionType": "original_commit_for_fix" } ] } ], "cpeApplicability": [ { "nodes": [ { "operator": "OR", "negate": false, "cpeMatch": [ { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.8", "versionEndExcluding": "5.4.297" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.8", "versionEndExcluding": "5.10.241" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.8", "versionEndExcluding": "5.15.190" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.8", "versionEndExcluding": "6.1.148" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.8", "versionEndExcluding": "6.6.102" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.8", "versionEndExcluding": "6.12.42" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.8", "versionEndExcluding": "6.15.10" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.8", "versionEndExcluding": "6.16.1" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.8", "versionEndExcluding": "6.17" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/15df59809c54fbd687cdf27efbd2103a937459be" }, { "url": "https://git.kernel.org/stable/c/9535e440fe5bc6c5ac7cfb407e53bf788b8bf8d4" }, { "url": "https://git.kernel.org/stable/c/5cd99d5aa3d39086bdb53eb5c52df16e98b101a0" }, { "url": "https://git.kernel.org/stable/c/4732ca17c17f5062426cfa982f43593e6b81963b" }, { "url": "https://git.kernel.org/stable/c/880ef748e78a1eb7df2d8e11a9ef21e98bcaabe5" }, { "url": "https://git.kernel.org/stable/c/97df495d754116c8c28ac6a4112f831727bde887" }, { "url": "https://git.kernel.org/stable/c/9bbfe83924946552c4c513099c0e8c83af76311a" }, { "url": "https://git.kernel.org/stable/c/42f9ea16aea8b49febaa87950a006a1792209f38" }, { "url": "https://git.kernel.org/stable/c/a509a55f8eecc8970b3980c6f06886bbff0e2f68" } ], "title": "f2fs: fix to avoid panic in f2fs_evict_inode", "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": { "orgId": "af854a3a-2127-422b-91ae-364da2661108", "shortName": "CVE", "dateUpdated": "2025-11-03T17:40:05.572Z" } } ] } }