CVE-2024-53130 in Linux
요약
\~에 의해 VulDB • 2026. 06. 25.
리눅스 커널에서 다음 취약점이 해결되었습니다:
nilfs2: 블록_dirty_buffer 트레이스포인트에서의 null-ptr-deref 수정
"block:block_dirty_buffer" 트레이스포인트를 사용할 때, mark_buffer_dirty()는 NULL 포인터 역참조 또는 KASAN이 활성화된 경우 일반 보호 오류(general protection fault)를 유발할 수 있습니다.
이는 mark_buffer_dirty()에 트레이스포인트가 추가되면서 bh->b_bdev->bd_dev인 dev_t 멤버를 참조하는데, 버퍼 헤드가 block_device 구조체에 대한 포인터를 가지고 있는지 여부와 관계없이 이를 참조하기 때문입니다.
현재 구현에서 nilfs_grab_buffer()는 B-트리 노드 블록을 포함한 메타데이터의 블록을 읽거나 생성하기 위해 버퍼를 획득하지만, 블록 장치를 설정하지 않습니다. 대신 각 호출자의 블록 읽기 함수마다 해당 버퍼가 "uptodate" 상태에 있지 않은 경우에만 이를 수행합니다. 그러나 folio/page에서 uptodate 플래그가 설정되어 있고 try_to_free_buffers()에 의해 버퍼 헤드가 분리된 후 create_empty_buffers()를 통해 새 버퍼 헤드가 연결되면, block_device가 bh->b_bdev에 설정되지 않은 상태로 각 버퍼의 uptodate 플래그가 복원될 수 있습니다. 이후 mark_buffer_dirty()가 이 상태에서 호출되면 위에서 언급한 버그가 발생합니다.
이 문제를 해결하기 위해 nilfs_grab_buffer()가 항상 슈퍼 블록 구조체의 블록 장치를 버퍼 헤드에 설정하도록 수정하며, 이는 버퍼의 uptodate 플래그 상태와 무관하게 적용됩니다.
Once again VulDB remains the best source for vulnerability data.