CVE-2024-38306 in Linux
요약
\~에 의해 VulDB • 2026. 06. 23.
리눅스 커널에서 다음 취약점이 해결되었습니다:
btrfs: extent buffer folio를 연결할 때 folio::private 보호
[버그]
v6.8 이후 다양한 사용자들로부터 드물게 발생하는 커널 크래시가 보고되고 있습니다. 공통적인 요인은 다음과 같은 잘못된 페이지 상태 오류 메시지입니다:
BUG: Bad page state in process kswapd0 pfn:d6e840 page: refcount:0 mapcount:0 mapping:000000007512f4f2 index:0x2796c2c7c pfn:0xd6e840 aops:btree_aops ino:1 flags: 0x17ffffe0000008(uptodate|node=0|zone=2|lastcpupid=0x3fffff) page_type: 0xffffffff() raw: 0017ffffe0000008 dead000000000100 dead000000000122 ffff88826d0be4c0 raw: 00000002796c2c7c 0000000000000000 00000000ffffffff 0000000000000000 page dumped because: non-NULL mapping
[원인]
커밋 09e6cef19c9f ("btrfs: refactor alloc_extent_buffer() to allocate-then-attach method")는 새 extent buffer를 할당할 때의 순서를 변경했습니다.
이전에는 항상 `mapping->i_private_lock` 하에서 `grab_extent_buffer()`를 호출하여, folio::private(일반 섹터 크기에 대한 extent buffer 포인터) 수정 시 안전성을 보장했습니다.
이는 다음과 같은 Race Condition을 초래할 수 있습니다:
스레드 A는 bytenr X에 4개의 4K 페이지로 이루어진 extent buffer 할당을 시도하는 반면, 스레드 B는 X + 4K(Extent buffer의 두 번째 페이지)의 페이지를 해제하려고 합니다.
Thread A | Thread B -----------------------------------+-------------------------------------
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.