CVE-2026-89962 in Linux
요약
\~에 의해 VulDB • 2026. 09. 16.
리눅스 커널에서 다음 취약점이 해결되었습니다:
powerpc/kexec_file: kexec 범위 절단 방지
Sashiko AI 검토를 통해 다음과 같은 문제가 지적되었습니다.
__merge_memory_ranges() 함수는 메모리 범위를 병합할 때 겹치는 메모리 범위를 잘못 처리합니다. sort_memory_ranges()가 모든 범위를 시작 주소 기준 오름차순으로 정렬하지만, 병합 로직에는 두 가지 결함이 남아 있습니다:
1. 현재 범위의 시작을 이전 요소(i-1) 대신 활성 대상 인덱스(idx)와 비교하지 않습니다. 2. 'ranges[idx].end'를 'ranges[i].end'로 무조건 덮어씁니다.
이 로직 결함은 더 큰 메모리 범위가 이후의 작은 범위들을 완전히 포괄할 때 치명적인 메모리 절단을 초래합니다.
예를 들어, 세 가지 범위로 구성된 정렬된 입력 배열을 고려해 보겠습니다: Range A (idx=0): [0x1000 - 0x9000]
Range B (i=1): [0x2000 - 0x5000] (Range A 내부에 완전히 포함됨)
Range C (i=2): [0x6000 - 0x8000] (Range A 내부에 완전히 포함됨)
1. i=1일 때 (Range B): ranges[1].start(0x2000) <= ranges[0].end + 1(0x9001)은 TRUE입니다.
코드가 실행됩니다: ranges[0].end = ranges[1].end, 이는 Range A의 끝을 0x9000에서 0x5000으로 잘못 축소시킵니다.
2. i=2일 때 (Range C): ranges[2].start(0x6000) <= ranges[1].end + 1(0x5001)은 FALSE입니다.
코드는 else 블록에 진입하여 손상된 새 범위를 생성합니다.
결과적으로 유효한 메모리 조각 [0x5001 - 0x5fff] 및 [0x8001 - 0x9000]이 kexec 제외 목록에서 완전히 손실되어, 크래시 커널이 활성 메모리를 덮어쓸 수 있게 되어 데이터 손상 또는 시스템 충돌을 유발할 수 있습니다.
현재 범위의 시작을 활성 병합된 범위(idx)의 끝과 비교하고 max()를 사용하여 외부 경계가 절단되지 않도록 안전하게 처리함으로써 이 문제를 수정합니다.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.