🇰🇷 한글 설명
Linux 커널의 F2FS 파일 시스템에서 inode 노드와 dnode 노드가 동일한 NID를 공유하여 발생하는 취약점입니다. f2fs_evict_inode() 과정에서 dnode 노드 절단 시 NAT 엔트리가 무효화되어, inode 노드 절단 시 dirty 상태가 제대로 해제되지 않고 커널 버그가 발생할 수 있습니다.
💡 쉬운 설명
파일 시스템이 데이터를 정리하는 과정에서 정보가 꼬여 시스템이 멈추거나 오류가 발생하는 문제입니다. 특정 파일 정보를 지울 때 데이터 기록 상태를 제대로 업데이트하지 못해 발생합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
f2fs: fix to clear dirty inode in f2fs_evict_inode()
As Yanming reported in bugzilla:
https://bugzilla.kernel.org/show_bug.cgi?id=215904
The kernel message is shown below:
kernel BUG at fs/f2fs/inode.c:825!
Call Trace:
evict+0x282/0x4e0
__dentry_kill+0x2b2/0x4d0
shrink_dentry_list+0x17c/0x4f0
shrink_dcache_parent+0x143/0x1e0
do_one_tree+0x9/0x30
shrink_dcache_for_umount+0x51/0x120
generic_shutdown_super+0x5c/0x3a0
kill_block_super+0x90/0xd0
kill_f2fs_super+0x225/0x310
deactivate_locked_super+0x78/0xc0
cleanup_mnt+0x2b7/0x480
task_work_run+0xc8/0x150
exit_to_user_mode_prepare+0x14a/0x150
syscall_exit_to_user_mode+0x1d/0x40
do_syscall_64+0x48/0x90
The root cause is: inode node and dnode node share the same nid,
so during f2fs_evict_inode(), dnode node truncation will invalidate
its NAT entry, so when truncating inode node, it fails due to
invalid NAT entry, result in inode is still marked as dirty, fix
this issue by clearing dirty for inode and setting SBI_NEED_FSCK
flag in filesystem.
output from dump.f2fs:
[print_node_info: 354] Node ID [0xf:15] is inode
i_nid[0] [0x f : 15]
📍 영향받는 시스템
F2FS 파일 시스템을 사용하는 Linux 커널 버전
⚔️ 공격 벡터
로컬 사용자가 특정 파일 시스템 조작을 통해 커널 패닉(Kernel BUG) 유도 가능
🛡️ 대응 방법
F2FS 관련 수정 사항이 포함된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 버전인지 확인