🇰🇷 한글 설명
리눅스 커널의 blk-iolatency 구성 요소에서 정책 데이터 해제 시 지연 상태를 제대로 초기화하지 않는 취약점이 발견되었습니다. 이로 인해 특정 cgroup의 혼잡 상태가 영구적으로 유지되어 입출력 성능이 심각하게 저하될 수 있습니다.
💡 쉬운 설명
컴퓨터의 데이터 읽기/쓰기 속도를 조절하는 기능에서 오류가 발생하여, 한 번 느려진 시스템이 다시는 빨라지지 않는 문제가 있습니다. 이로 인해 파일 읽기나 메모리 관리 속도가 매우 느려질 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
blk-iolatency: clear delay state when freeing policy data
io.latency can throttle a group which has no latency target of its own.
When a sibling misses its target, check_scale_change() scales down its
peers, and a peer that reaches queue depth one gets blkcg_use_delay()
called on it on every further scale-down, even with min_lat_nsec == 0.
iolatency_pd_offline() resets the target through
iolatency_set_min_lat_nsec(), which clears the delay only on a nonzero
to zero transition, so it never clears such a peer. Freeing the policy
data then leaves blkg->use_delay set and blkcg->congestion_count
elevated with nothing left that can drop it.
blk_cgroup_congested() then returns true for every task in that cgroup
and its descendants for as long as the cgroup lives: page_cache_sync_ra()
cuts readahead to a single page, page_cache_async_ra() skips it
altogether, and __folio_throttle_swaprate() takes swap_avail_lock and
schedules a throttle on anonymous folio allocation.
Clear the delay in iolatency_pd_free(). By then bio-held blkg
references have drained, or the queue is frozen for policy
deactivation, so check_scale_change() cannot re-arm it. The free
callback can also see policy data which was never attached to a blkg,
hence the pd->blkg check.
📍 영향받는 시스템
Linux kernel (blk-iolatency 관련 기능이 활성화된 버전)
⚔️ 공격 벡터
직접적인 외부 공격보다는 특정 I/O 부하 패턴을 유도하여 시스템 성능을 저하시키는 서비스 거부(DoS) 형태의 영향 가능성
🛡️ 대응 방법
리눅스 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 iolatency_pd_free() 함수가 지연 상태를 초기화하도록 수정해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인합니다.