🇰🇷 한글 설명
Linux 커널의 F2FS 파일 시스템에서 LFS 모드를 사용할 때, 블록 할당 과정 중 공간 부족 상황을 적절히 처리하지 못해 시스템 패닉(Kernel BUG)이 발생하는 취약점입니다. 여러 스레드가 병렬로 데이터를 쓸 때 가비지 컬렉션(GC)이 제때 트리거되지 않아 발생합니다.
💡 쉬운 설명
파일 저장 공간이 거의 없을 때, 시스템이 데이터를 저장하려고 시도하다가 갑자기 멈추거나 꺼질 수 있는 문제입니다. 특히 특정 설정(LFS 모드)을 사용 중일 때 발생할 확률이 높습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
f2fs: fix to trigger foreground gc during f2fs_map_blocks() in lfs mode
w/ "mode=lfs" mount option, generic/299 will cause system panic as below:
------------[ cut here ]------------
kernel BUG at fs/f2fs/segment.c:2835!
Call Trace:
<TASK>
f2fs_allocate_data_block+0x6f4/0xc50
f2fs_map_blocks+0x970/0x1550
f2fs_iomap_begin+0xb2/0x1e0
iomap_iter+0x1d6/0x430
__iomap_dio_rw+0x208/0x9a0
f2fs_file_write_iter+0x6b3/0xfa0
aio_write+0x15d/0x2e0
io_submit_one+0x55e/0xab0
__x64_sys_io_submit+0xa5/0x230
do_syscall_64+0x84/0x2f0
entry_SYSCALL_64_after_hwframe+0x76/0x7e
RIP: 0010:new_curseg+0x70f/0x720
The root cause of we run out-of-space is: in f2fs_map_blocks(), f2fs may
trigger foreground gc only if it allocates any physical block, it will be
a little bit later when there is multiple threads writing data w/
aio/dio/bufio method in parallel, since we always use OPU in lfs mode, so
f2fs_map_blocks() does block allocations aggressively.
In order to fix this issue, let's give a chance to trigger foreground
gc in prior to block allocation in f2fs_map_blocks().
📍 영향받는 시스템
LFS(Log-structured File System) 모드로 마운트된 F2FS 파일 시스템을 사용하는 Linux 커널
⚔️ 공격 벡터
로컬 사용자가 병렬 I/O 작업(aio/dio 등)을 통해 파일 시스템의 저장 공간을 소진시켜 시스템 패닉 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 f2fs_map_blocks() 내 GC 트리거 로직 수정 적용
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 최신 패치 버전인지 확인