🇰🇷 한글 설명
Linux 커널의 ext4 파일시스템에서 fast_commit 재생 중 초기화되지 않은 extent_status 구조체로 인해 무한 루프가 발생합니다. ext4_es_find_extent_range() 함수가 재생 상태를 감지하지 못하여 쓰레기 데이터로 정수 오버플로우가 발생하고, 이로 인한 무한 루프로 시스템이 응답 불가 상태에 빠집니다.
💡 쉬운 설명
Linux의 파일 저장 시스템에서 특정 상황에 프로그램이 무한히 반복되는 문제입니다. 초기화되지 않은 메모리를 사용할 때 발생하며, 시스템이 멈출 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ext4: fix infinite loop when replaying fast_commit
When doing fast_commit replay an infinite loop may occur due to an
uninitialized extent_status struct. ext4_ext_determine_insert_hole() does
not detect the replay and calls ext4_es_find_extent_range(), which will
return immediately without initializing the 'es' variable.
Because 'es' contains garbage, an integer overflow may happen causing an
infinite loop in this function, easily reproducible using fstest generic/039.
This commit fixes this issue by unconditionally initializing the structure
in function ext4_es_find_extent_range().
Thanks to Zhang Yi, for figuring out the real problem!
📍 영향받는 시스템
Linux kernel (ext4 파일시스템이 활성화된 모든 버전, 특히 fast_commit 기능 사용)
⚔️ 공격 벡터
로컬 접근 권한 있는 공격자가 파일시스템 작업으로 fast_commit 재생을 트리거하여 DoS 유발
🛡️ 대응 방법
Linux kernel을 최신 버전으로 업데이트하여 ext4_es_find_extent_range() 함수의 구조체 초기화 패치 적용
🔧 검증 코드
현재 커널 버전과 ext4 마운트 개수를 확인하여 영향받는 환경 여부를 판단합니다.
uname -r | head -c 20 && mount | grep 'type ext4' | wc -l