🔍 CVE-2024-40943

7.8
CVSS Score
HIGH
2024-07-12
2026-08-04 11:19
✅ 완료

🇰🇷 한글 설명

Linux 커널의 OCFS2 파일 시스템에서 hole punching 작업과 AIO+DIO 작업 간의 레이스 컨디션(경쟁 상태) 취약점이 발견되었습니다. 이로 인해 파일 시스템의 데이터 무결성이 손상되어 파일 시스템이 읽기 전용 모드로 전환되거나 온디스크 손상이 발생할 수 있습니다.

💡 쉬운 설명

파일을 저장하는 과정과 파일의 빈 공간을 만드는 과정이 동시에 일어날 때 충돌이 발생하여 데이터가 깨질 수 있는 문제입니다. 이 문제가 발생하면 컴퓨터가 데이터를 보호하기 위해 파일을 더 이상 수정할 수 없는 상태로 잠가버립니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: ocfs2: fix races between hole punching and AIO+DIO After commit "ocfs2: return real error code in ocfs2_dio_wr_get_block", fstests/generic/300 become from always failed to sometimes failed: ======================================================================== [ 473.293420 ] run fstests generic/300 [ 475.296983 ] JBD2: Ignoring recovery information on journal [ 475.302473 ] ocfs2: Mounting device (253,1) on (node local, slot 0) with ordered data mode. [ 494.290998 ] OCFS2: ERROR (device dm-1): ocfs2_change_extent_flag: Owner 5668 has an extent at cpos 78723 which can no longer be found [ 494.291609 ] On-disk corruption discovered. Please run fsck.ocfs2 once the filesystem is unmounted. [ 494.292018 ] OCFS2: File system is now read-only. [ 494.292224 ] (kworker/19:11,2628,19):ocfs2_mark_extent_written:5272 ERROR: status = -30 [ 494.292602 ] (kworker/19:11,2628,19):ocfs2_dio_end_io_write:2374 ERROR: status = -3 fio: io_u error on file /mnt/scratch/racer: Read-only file system: write offset=460849152, buflen=131072 ========================================================================= In __blockdev_direct_IO, ocfs2_dio_wr_get_block is called to add unwritten extents to a list. extents are also inserted into extent tree in ocfs2_write_begin_nolock. Then another thread call fallocate to puch a hole at one of the unwritten extent. The extent at cpos was removed by ocfs2_remove_extent(). At end io worker thread, ocfs2_search_extent_list found there is no such extent at the cpos. T1 T2 T3 inode lock ... insert extents ... inode unlock ocfs2_fallocate __ocfs2_change_file_space inode lock lock ip_alloc_sem ocfs2_remove_inode_range inode ocfs2_remove_btree_range ocfs2_remove_extent ^---remove the extent at cpos 78723 ... unlock ip_alloc_sem inode unlock ocfs2_dio_end_io ocfs2_dio_end_io_write lock ip_alloc_sem ocfs2_mark_extent_written ocfs2_change_extent_flag ocfs2_search_extent_list ^---failed to find extent ... unlock ip_alloc_sem In most filesystems, fallocate is not compatible with racing with AIO+DIO, so fix it by adding to wait for all dio before fallocate/punch_hole like ext4.

📍 영향받는 시스템

Linux kernel (OCFS2 파일 시스템을 사용하는 시스템)

⚔️ 공격 벡터

로컬 사용자가 특정 파일 시스템 작업(fallocate 및 AIO/DIO)을 동시에 수행하여 레이스 컨디션을 유도

🛡️ 대응 방법

Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 fallocate 작업 시 DIO 작업이 완료될 때까지 대기하도록 수정

🔧 검증 코드

현재 실행 중인 커널 버전을 확인하여 해당 취약점이 해결된 최신 패치 버전인지 확인합니다.

Shell / Script
uname -r

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

💻 영향받는 소프트웨어

Linux Kernel