🇰🇷 한글 설명
Linux 커널의 ntfs3 파일 시스템에서 ni_read_folio_cmpr 함수 호출 시 inode 뮤텍스와 페이지 잠금 간의 순서가 뒤바뀌어 데드락(교착 상태)이 발생하는 취약점입니다. 이로 인해 특정 상황에서 시스템 작업이 중단되거나 멈출 수 있습니다.
💡 쉬운 설명
두 개의 작업이 서로가 가진 열쇠를 기다리며 무한히 대기하는 상태가 되어 컴퓨터가 멈추는 문제입니다. 파일 읽기 과정에서 잠금 순서가 잘못 설정되어 발생했습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
fs/ntfs3: fix deadlock in ni_read_folio_cmpr
Syzbot reported a task hung in ni_readpage_cmpr (now ni_read_folio_cmpr).
This is caused by a lock inversion deadlock involving the inode mutex
(ni_lock) and page locks.
Scenario:
1. Task A enters ntfs_read_folio() for page X. It acquires ni_lock.
2. Task A calls ni_read_folio_cmpr(), which attempts to lock all pages in
the compressed frame (including page Y).
3. Concurrently, Task B (e.g., via readahead) has locked page Y and
calls ntfs_read_folio().
4. Task B waits for ni_lock (held by A).
5. Task A waits for page Y lock (held by B).
-> DEADLOCK.
The fix is to restructure locking: do not take ni_lock in ntfs_read_folio().
Instead, acquire ni_lock inside ni_read_folio_cmpr() ONLY AFTER all required
page locks for the frame have been successfully acquired. This restores the
correct lock ordering (Page Lock -> ni_lock) consistent with VFS.
[
[email protected]: ni_readpage_cmpr was renamed to ni_read_folio_cmpr]
📍 영향받는 시스템
Linux kernel (ntfs3 driver 사용 환경)
⚔️ 공격 벡터
특정 조건의 파일 읽기 요청을 유도하여 시스템 데드락 유발 (Local/Denial of Service)
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 잠금 순서를 수정해야 합니다.
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 해결된 패치 버전인지 확인합니다.