CVE-2026-98226 in Linux정보

요약

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

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

mm, swap: SWAP_USAGE_OFFLIST_BIT와 실제 사용량 카운터 간의 충돌 수정

SWAP_USAGE_OFFLIST_BIT는 si->inuse_pages 사용량 카운터에 내장되어 있으며, 해당 카운터가 도달할 수 있는 모든 값 위에 위치해야 합니다. 그러나 이 비트는 BITS_PER_TYPE(atomic_t)를 기준으로 정의되므로 30번째 비트(bit 30)입니다. 페이지 크기가 4 KiB인 시스템에서는 사용량 카운터가 4 TiB에 도달하면 플래그와 충돌이 발생합니다.

swap_usage_in_pages() 함수는 bit 30을 마스크하므로, 실제 카운터에서 해당 비트가 설정되어 있을 때 이 함수를 호출하는 모든 곳은 낮은 값으로 4 TiB를 읽습니다:

* /proc/swaps에서는 사용량(Used)이 4 TiB만큼 과소 보고됩니다. * 정확히 2^30인 원시(raw) 카운터는 마스크되면 0이 되므로, try_to_unuse() 함수는 "if (!swap_usage_in_pages(si)) goto success;" 조건에 따라 조기 종료되고 swapoff 장치는 페이지가 여전히 스왑 아웃된 상태로 장치 teardown을 진행합니다. 나머지 swapoff 코드에서는 이 teardown 작업을 중단하는 조치가 없으므로 해당 페이지들이 손실됩니다.

swapoff와 독립적으로, 충돌은 카운터와 plist를 손상시킵니다. 정상적인 사용 중인 디바이스에서 bit 30이 카운터에 설정된 상태로 free가 발생하면, swap_usage_sub() 함수는 실제 카운터 값 대신 플래그를 감지하여 add_to_avail_list()를 호출합니다. 이 함수는 fetch_and(~SWAP_USAGE_OFFLIST_BIT)로 해당 비트를 지워 저장된 카운터를 실제값보다 4 TiB 낮게 만들고, 이미 목록에 등록되어 있는 디바이스에 대해 plist_add()를 호출합니다. 이로 인해 plist_add() 내의 WARN_ON(!plist_node_empty(node))가 트리거되며 노드가 두 번째로 링크됩니다.

SWAP_USAGE_OFFLIST_BIT의 정의를 atomic_long_t 기반으로 변경하십시오. 참고로 사용량 카운터 필드 자체도 동일한 타입이므로, 여전히 유효한 비트입니다.

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

책임이 있는

Linux

예약하다

2026. 09. 25.

모더레이션

수락

항목

VDB-414189

EPSS

0.00173

출처

Do you want to use VulDB in your project?

Use the official API to access entries easily!