🇰🇷 한글 설명
Linux 커널의 jbd2 저널링 계층에서 jbd2_journal_dirty_metadata() 함수가 NULL일 수 있는 handle->h_transaction을 역참조하는 널 포인터 역참조 문제와, jh->b_modified 필드에 대한 data-race 주석이 누락되어 발생하는 경쟁 조건이 수정되었습니다. 이 결함은 ext4 파일시스템의 메타데이터 갱신 경로에 영향을 줍니다.
💡 쉬운 설명
리눅스 커널이 파일 시스템의 기록 작업을 관리하는 과정에서, 존재하지 않는 대상을 참조하거나 여러 작업이 같은 값을 동시에 건드리는 문제가 있었습니다. 이를 바로잡기 위해 값 확인 순서와 동기화 표시를 추가했습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
jbd2: fix data-race and null-ptr-deref in jbd2_journal_dirty_metadata()
Since handle->h_transaction may be a NULL pointer, so we should change it
to call is_handle_aborted(handle) first before dereferencing it.
And the following data-race was reported in my fuzzer:
==================================================================
BUG: KCSAN: data-race in jbd2_journal_dirty_metadata / jbd2_journal_dirty_metadata
write to 0xffff888011024104 of 4 bytes by task 10881 on cpu 1:
jbd2_journal_dirty_metadata+0x2a5/0x770 fs/jbd2/transaction.c:1556
__ext4_handle_dirty_metadata+0xe7/0x4b0 fs/ext4/ext4_jbd2.c:358
ext4_do_update_inode fs/ext4/inode.c:5220 [inline]
ext4_mark_iloc_dirty+0x32c/0xd50 fs/ext4/inode.c:5869
__ext4_mark_inode_dirty+0xe1/0x450 fs/ext4/inode.c:6074
ext4_dirty_inode+0x98/0xc0 fs/ext4/inode.c:6103
....
read to 0xffff888011024104 of 4 bytes by task 10880 on cpu 0:
jbd2_journal_dirty_metadata+0xf2/0x770 fs/jbd2/transaction.c:1512
__ext4_handle_dirty_metadata+0xe7/0x4b0 fs/ext4/ext4_jbd2.c:358
ext4_do_update_inode fs/ext4/inode.c:5220 [inline]
ext4_mark_iloc_dirty+0x32c/0xd50 fs/ext4/inode.c:5869
__ext4_mark_inode_dirty+0xe1/0x450 fs/ext4/inode.c:6074
ext4_dirty_inode+0x98/0xc0 fs/ext4/inode.c:6103
....
value changed: 0x00000000 -> 0x00000001
==================================================================
This issue is caused by missing data-race annotation for jh->b_modified.
Therefore, the missing annotation needs to be added.
📍 영향받는 시스템
패치 이전의 Linux 커널 (jbd2 저널링을 사용하는 ext4 파일시스템 환경)
⚔️ 공격 벡터
로컬 사용자가 ext4 파일시스템에서 메타데이터 갱신을 유발하는 작업을 동시에 실행해 경쟁 조건을 일으키거나 널 포인터 참조로 커널 오류를 유발할 수 있습니다.
🛡️ 대응 방법
배포판이 제공하는 수정된 Linux 커널 업데이트를 적용하고 시스템을 재부팅하십시오.
🔧 검증 코드
출력된 커널 버전을 배포판 보안 공지에서 CVE-2025-38337 수정이 포함된 빌드와 비교하여, 해당 수정 이후 버전이면 패치된 것입니다.