CVE-2026-45895 in Linux정보

요약

\~에 의해 VulDB • 2026. 06. 01.

리눅스 커널에서 다음 취약점이 해결되었습니다:

quota: quotactl과 freeze_super 간의 livelock(livelock 상태) 수정

파일시스템이 동결(frozen) 상태일 때, quotactl_block()은 파일시스템이 해동(thaw)될 때까지 대기하는 재시도 루프에 진입합니다. 이 함수는 s_umount을 획득한 후 동결 상태를 확인하고, s_umount을 해제한 다음 sb_start_write() - sb_end_write() 쌍을 사용하여 해동을 기다립니다.

그러나 이 재시도 루프는 특히 프리엠프션(preemption)이 비활성화된 커널에서 livelock 문제를 유발할 수 있습니다.

메커니즘은 다음과 같습니다: 1. freeze_super()는 SB_FREEZE_WRITE를 설정하고 sb_wait_write()를 호출합니다. 2. sb_wait_write()는 percpu_down_write()를 호출하며, 이는 synchronize_rcu()를 시작합니다. 3. 동시에 quotactl_block()은 재시도 루프에서 스피닝(spins)하며, sb_start_write() - sb_end_write() 쌍을 즉시 실행합니다. 4. 커널이 프리엠프션이 불가능(non-preemptible)하고 루프에 스케줄링 포인트가 없기 때문에, quotactl_block()은 CPU를 양도하지 않습니다. 이로 인해 해당 CPU가 RCU 정지 상태(RCU quiescent state)에 도달하지 못합니다. 5. freezer 스레드의 synchronize_rcu()는 quotactl_block() CPU가 정지 상태를 보고할 때까지 무한히 대기합니다. 6. quotactl_block()은 RCU 동기화 때문에 차단되어 진행할 수 없는 freezer가 진행되기를 무한히 스피닝하며 기다립니다.

이로 인해 freezer 프로세스가 멈추고 quota 프로세스가 CPU 사용률 100%를 차지하게 됩니다.

이 현상은 멀티코어 시스템에서 간헐적으로 발생할 수 있지만, 다음 스크립트를 실행하여 freezer와 quota 토글을 동일한 CPU에서 실행하는 노드에서는 reliably(reliably하게) 재현됩니다:

# mkfs.ext4 -O quota /dev/sda 2g && mkdir a_mount # mount /dev/sda -o quota,usrquota,grpquota a_mount # taskset -c 3 bash -c "while true; do xfs_freeze -f a_mount; \ xfs_freeze -u a_mount; done" & # taskset -c 3 bash -c "while true; do quotaon a_mount; \ quotaoff a_mount; done" &

재시도 루프에 cond_resched()를 추가하면 이 문제가 해결됩니다. 이는 RCU 정지 상태 역할을 하여 percpu_down_write()의 synchronize_rcu()가 완료될 수 있도록 합니다.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

책임이 있는

Linux

예약하다

2026. 05. 13.

모더레이션

수락

항목

VDB-366083

EPSS

0.00024

활동

낮음

출처

Do you need the next level of professionalism?

Upgrade your account now!