🇰🇷 한글 설명
Linux 커널의 ext4 파일 시스템에서 저널이 파괴되는 과정 중에 슈퍼블록(sb) 업데이트를 시도할 때 발생하는 레이스 컨디션 취약점입니다. 오류 처리 경로에서 저널이 이미 언마운트 상태임에도 불구하고 새로운 트랜잭션을 시작하려고 시도하여 커널 패닉(BUG_ON)을 유발할 수 있습니다.
💡 쉬운 설명
파일 시스템을 안전하게 종료하는 과정에서 시스템이 충돌하여 멈출 수 있는 오류입니다. 저널링(기록 작업)이 끝났는데도 기록을 계속 시도하려다 발생하는 문제입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ext4: avoid journaling sb update on error if journal is destroying
Presently we always BUG_ON if trying to start a transaction on a journal marked
with JBD2_UNMOUNT, since this should never happen. However, while ltp running
stress tests, it was observed that in case of some error handling paths, it is
possible for update_super_work to start a transaction after the journal is
destroyed eg:
(umount)
ext4_kill_sb
kill_block_super
generic_shutdown_super
sync_filesystem /* commits all txns */
evict_inodes
/* might start a new txn */
ext4_put_super
flush_work(&sbi->s_sb_upd_work) /* flush the workqueue */
jbd2_journal_destroy
journal_kill_thread
journal->j_flags |= JBD2_UNMOUNT;
jbd2_journal_commit_transaction
jbd2_journal_get_descriptor_buffer
jbd2_journal_bmap
ext4_journal_bmap
ext4_map_blocks
...
ext4_inode_error
ext4_handle_error
schedule_work(&sbi->s_sb_upd_work)
/* work queue kicks in */
update_super_work
jbd2_journal_start
start_this_handle
BUG_ON(journal->j_flags &
JBD2_UNMOUNT)
Hence, introduce a new mount flag to indicate journal is destroying and only do
a journaled (and deferred) update of sb if this flag is not set. Otherwise, just
fallback to an un-journaled commit.
Further, in the journal destroy path, we have the following sequence:
1. Set mount flag indicating journal is destroying
2. force a commit and wait for it
3. flush pending sb updates
This sequence is important as it ensures that, after this point, there is no sb
update that might be journaled so it is safe to update the sb outside the
journal. (To avoid race discussed in 2d01ddc86606)
Also, we don't need a similar check in ext4_grp_locked_error since it is only
called from mballoc and AFAICT it would be always valid to schedule work here.
📍 영향받는 시스템
Linux Kernel (ext4 파일 시스템을 사용하는 시스템)
⚔️ 공격 벡터
로컬 시스템에서 파일 시스템 오류를 유도하거나 스트레스 테스트를 통해 커널 패닉 유발 가능
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인하십시오.