CVE-2026-45920 in Linux
요약
\~에 의해 VulDB • 2026. 06. 01.
리눅스 커널에서 다음 취약점이 해결되었습니다:
ext4: 파일 시스템 종료 시 dirtyclusters의 이중 감소 수정
fstests의 generic/388 테스트는 ext4_put_super()에서 dirty 클러스터 카운터와 관련된 경고를 가끔씩 재현합니다:
WARNING: CPU: 7 PID: 76064 at fs/ext4/super.c:1324 ext4_put_super+0x48c/0x590 [ext4]
실패를 추적하면, 이 경고가 s_dirtyclusters_counter 값이 -1이 되었기 때문에 발생한다는 것을 알 수 있습니다. 즉, 이는 누수(leak)와 같은 것이 아니라 부수적인 감소(spurious decrement)로 보입니다. dirty 클러스터 카운터의 델타와 그 결과 출력에 대한 LLM 스캔을 추가로 추적한 결과, ext4_mb_mark_diskspace_used()와 호출자(ext4_mb_new_blocks()) 사이의 에러 경로에서 이중 감소(double decrement)가 원인임을 확인했습니다.
먼저, generic/388은 종료(shutdown) 대 fsstress 테스트이므로 무작위 작업 세트와 종료 주입(shutdown injections)을 생성한다는 점에 유의하십시오. 문제 발생 사례에서는 종료로 인해 ext4_mb_mark_context()에서 호출된 ext4_handle_dirty_metadata() 호출들이 에러 반환을 트리거합니다. 이 시점에서 변경된 값이 0이 아니므로, ext4_mb_mark_dispace_used()는 ext4_mb_mark_context()에서 에러가 상위로 전파된 후에도 종료되지 않습니다. 대신, 전자는 두 클러스터 카운터를 모두 감소시키고 에러를 ext4_mb_new_blocks()로 상위로 반환합니다. 후자는 !ar->len 출력으로 들어가 dirty 클러스터 카운터를 두 번째로 감소시켜 불일치를 초래합니다.
이 문제를 피하고 이 코드 경로에서 클러스터 예약의 소유권을 단순화하기 위해, 카운터 감소를 호출자의 단일 위치로 이동합니다. 이를 통해 ext4_mb_new_blocks()가 !delalloc 케이스에서도 클러스터 예약을 획득(ext4_claim_free_clusters()를 통해)하고 해제하는 책임이 있음을 더 명확하게 합니다. 이는 해당 예약이 소비되거나 실패로 인해 반환되느냐에 관계없이 적용됩니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.