CVE-2026-80916 in Linux정보

요약

\~에 의해 VulDB • 2026. 09. 09.

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

kcov: PREEMPT_RT 환경에서의 데이터 손상 및 Race Condition 수정

syzbot이 PREEMPT RT 커널에서 KCOV 상태 손상을 보고하고 있습니다. 이는 원격 KCOV 상태를 저장/복원하는 데 사용되는 임시 저장소가 현재 per-CPU 영역으로 할당되어 있기 때문입니다.

PREEMPT RT 커널에서는 softirq 핸들러가 preemptible task 스레드(예: ksoftirqd)로 실행됩니다. 만약 어떤 softirq 컨텍스트가 원격 KCOV 세션을 실행 중인 태스크를 선점(preempt)하면, 해당 태스크의 상태를 per-CPU 영역에 안전하게 저장합니다. 그러나 그 후 동일한 CPU에서 더 높은 우선순위를 가진 다른 softirq 스레드에 의해 이 softirq 스레드가 다시 선점되면, 두 번째 softirq는 같은 per-CPU 영역을 덮어써서 원래 태스크의 KCOV 상태를 영구적으로 파괴하게 됩니다.

임시 저장소를 per-CPU 영역에서 per-thread 영역으로 이동하여 이러한 데이터 손상을 수정합니다. 이제 각 softirq 스레드가 자체적인 task 컨텍스트를 소유하므로, 중첩된 softirq 선점으로 인한 데이터 덮어쓰기가 더 이상 발생하지 않습니다.

임시 저장소가 now per-thread 단위로 배치되지만, kcov_percpu_data.lock은 유지해야 합니다. 이는 현재 태스크의 KCOV 상태를 조작하는 비동기 인터럽트와 경쟁(racing) 없이 kcov_remote_start() 및 kcov_remote_stop()이 원자적으로 동작함을 보장하기 위함입니다.

kcov_init()에서 vmalloc_node()에 의한 GFP_KERNEL 할당이 NULL을 반환하기 전에 이미 panic()을 호출했을 가능성이 높습니다. 이는 빌드된 모듈의 __init 함수가 실행될 때 OOM-killable한 userspace 프로세스가 없기 때문입니다. 그러나 이 패치는 또한 kcov_init()에서 vmalloc_node()이 NULL을 반환할 경우 커널 크래시를 수정합니다. 그 이유는 kcov_init()은 per-CPU irq_area를 NULL로 남겨두지만, kcov_remote_start()는 per-CPU irq_area != NULL에 의존하기 때문입니다. 이로 인해 다음과 같은 문제가 발생합니다:

(1) !in_task() 컨텍스트임에도 불구하고 kcov_remote_start()에서 vmalloc() 수행 (2) (1)이 성공했지만 kcov->remote_size < CONFIG_KCOV_IRQ_AREA_SIZE인 경우 배열 범위 밖 접근(out-of-array-bounds access) 발생 (3) (1)에 의해 할당된 메모리를 항상 누설시켜, 결국 모든 OOM-killable userspace 프로세스를 종료시킴

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

책임이 있는

Linux

예약하다

2026. 08. 26.

모더레이션

수락

항목

VDB-401819

EPSS

0.00000

출처

Want to stay up to date on a daily basis?

Enable the mail alert feature now!