CVE-2025-40025 in Linux
요약
\~에 의해 VulDB • 2026. 07. 02.
리눅스 커널에서 다음 취약점이 해결되었습니다:
f2fs: 비 inode dnode에 대한 노드 footer의 무결성 검사 수행 수정
syzbot이 아래에서 보고한 바와 같습니다:
------------[ cut here ]------------
kernel BUG at fs/f2fs/file.c:1243! Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI
CPU: 0 UID: 0 PID: 5354 Comm: syz.0.0 Not tainted 6.17.0-rc1-syzkaller-00211-g90d970cade8e #0 PREEMPT(full) RIP: 0010:f2fs_truncate_hole+0x69e/0x6c0 fs/f2fs/file.c:1243 Call Trace: <TASK> f2fs_punch_hole+0x2db/0x330 fs/f2fs/file.c:1306 f2fs_fallocate+0x546/0x990 fs/f2fs/file.c:2018 vfs_fallocate+0x666/0x7e0 fs/open.c:342 ksys_fallocate fs/open.c:366 [inline]
__do_sys_fallocate fs/open.c:371 [inline]
__se_sys_fallocate fs/open.c:369 [inline]
__x64_sys_fallocate+0xc0/0x110 fs/open.c:369 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0xfa/0x3b0 arch/x86/entry/syscall_64.c:94 entry_SYSCALL_64_after_hwframe+0x77/0x7f RIP: 0033:0x7f1e65f8ebe9
fuzzed된 이미지와 함께, f2fs는 f2fs_truncate_hole()에서 직접 노드(direct node) 내에서 일관성 없는 트렁케이션(truncation) 범위를 감지하여 패닉(panic)을 유발할 수 있습니다.
근본 원인은 다음과 같습니다: 비 inode dnode가 동일한 footer.ino와 footer.nid를 가질 수 있으므로, 해당 dnode는 inode로 파싱됩니다. 이로 인해 ADDRS_PER_PAGE()가 잘못된 blkaddr 개수(일반적으로 923임)를 반환할 수 있습니다. 우연히 dn.ofs_in_node가 923과 같으면 아래 문장에서 count가 0으로 계산될 수 있으며, 이후 f2fs_bug_on(, count == 0 || ...)와 함께 패닉이 트리거됩니다.
count = min(end_offset - dn.ofs_in_node, pg_end - pg_start);
이 패치는 새로운 노드 타입인 NODE_TYPE_NON_INODE를 도입하여, 비 inode dnode가 동일한 footer.ino 및 footer.nid를 가지는 부정을 감지하기 위해 f2fs_get_node_folio()에서 sanity_check_node_footer에 새 type을 전달할 수 있도록 합니다.
재현 스크립트: mkfs.f2fs -f /dev/vdb mount /dev/vdb /mnt/f2fs touch /mnt/f2fs/foo touch /mnt/f2fs/bar dd if=/dev/zero of=/mnt/f2fs/foo bs=1M count=8 umount /mnt/f2fs inject.f2fs --node --mb i_nid --nid 4 --idx 0 --val 5 /dev/vdb mount /dev/vdb /mnt/f2fs xfs_io /mnt/f2fs/foo -c "fpunch 6984k 4k"
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.