🇰🇷 한글 설명
Linux 커널 ext4 파일시스템에서 bmap 호출과 write 작업 사이의 경쟁 조건(race condition)으로 인해 ext4_iomap_begin에서 경고가 발생하는 문제가 수정되었습니다. 인라인 데이터 플래그가 설정되는 도중 bmap이 이를 확인하면서 WARN_ON_ONCE가 트리거될 수 있었으며, 수정안은 ext4_bmap에서 inode 락을 획득하도록 변경한 것입니다.
💡 쉬운 설명
파일 정보를 조회하는 작업과 파일에 쓰는 작업이 동시에 일어날 때 커널이 잘못된 상태를 감지해 경고를 띄울 수 있었습니다. 이를 막기 위해 조회 작업 중에도 파일 잠금을 걸어 두 작업이 겹치지 않도록 수정했습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ext4: fix warning in ext4_iomap_begin as race between bmap and write
We got issue as follows:
------------[ cut here ]------------
WARNING: CPU: 3 PID: 9310 at fs/ext4/inode.c:3441 ext4_iomap_begin+0x182/0x5d0
RIP: 0010:ext4_iomap_begin+0x182/0x5d0
RSP: 0018:ffff88812460fa08 EFLAGS: 00010293
RAX: ffff88811f168000 RBX: 0000000000000000 RCX: ffffffff97793c12
RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000003
RBP: ffff88812c669160 R08: ffff88811f168000 R09: ffffed10258cd20f
R10: ffff88812c669077 R11: ffffed10258cd20e R12: 0000000000000001
R13: 00000000000000a4 R14: 000000000000000c R15: ffff88812c6691ee
FS: 00007fd0d6ff3740(0000) GS:ffff8883af180000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007fd0d6dda290 CR3: 0000000104a62000 CR4: 00000000000006e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
iomap_apply+0x119/0x570
iomap_bmap+0x124/0x150
ext4_bmap+0x14f/0x250
bmap+0x55/0x80
do_vfs_ioctl+0x952/0xbd0
__x64_sys_ioctl+0xc6/0x170
do_syscall_64+0x33/0x40
entry_SYSCALL_64_after_hwframe+0x44/0xa9
Above issue may happen as follows:
bmap write
bmap
ext4_bmap
iomap_bmap
ext4_iomap_begin
ext4_file_write_iter
ext4_buffered_write_iter
generic_perform_write
ext4_da_write_begin
ext4_da_write_inline_data_begin
ext4_prepare_inline_data
ext4_create_inline_data
ext4_set_inode_flag(inode,
EXT4_INODE_INLINE_DATA);
if (WARN_ON_ONCE(ext4_has_inline_data(inode))) ->trigger bug_on
To solved above issue hold inode lock in ext4_bamp.
📍 영향받는 시스템
수정 이전의 Linux 커널 ext4 파일시스템을 사용하는 시스템 (해당 패치 적용 전 커널 버전)
⚔️ 공격 벡터
로컬 사용자가 FIBMAP 등 bmap 관련 ioctl을 호출하면서 동시에 같은 파일에 쓰기를 수행해 경쟁 조건을 유발하는 방식으로, 주로 커널 경고(DoS 성격) 발생이 목적입니다.
🛡️ 대응 방법
패배치된 최신 Linux 커널 버전으로 업데이트하여 ext4_bmap의 inode 락 수정 사항을 포함시키십시오.
🔧 검증 코드
출력된 커널 버전이 해당 CVE의 수정 패치가 포함된 배포판 커널 버전 이상이면 패치가 적용된 것이고, 이전 버전이면 커널 업데이트가 필요합니다.
uname -r && (dpkg -l linux-image-$(uname -r) 2>/dev/null || rpm -q kernel 2>/dev/null) | head -5