CVE-2026-89991 in Linux
요약
\~에 의해 VulDB • 2026. 09. 16.
리눅스 커널에서 다음 취약점이 해결되었습니다:
bpf: 단일 CPU 환경에서 pcpu_freelist push 시 무한 루프 수정
__pcpu_freelist_push()는 하나의 CPU만 사용 가능한 경우, 그리고 인터럽트된 컨텍스트가 해당 CPU의 freelist 잠금을 보유하고 있는 동안 NMI(Non-Maskable Interrupt)가 pcpu_freelist_push()를 재진입할 때 영원히 반복될 수 있습니다.
현재-CPU 고속 경로(fast path) 실패 후, 대체 루프는 현재 CPU를 제외하면서 cpu_possible_mask를 순회합니다. CONFIG_SMP=n인 경우 또는 nr_cpus=1 또는 possible_cpus=1로 인해 SMP 커널이 하나의 가능한 CPU로 제한된 경우에는 검사할 다른 가능성이 있는 CPU가 없습니다. 따라서 이 루프는 잠금 획득 시도를 전혀 수행하지 않으며 진전을 이루지 못합니다.
UP(Uniprocessor) 시스템에서 다음 스택이 관찰되었습니다:
NMI 컨텍스트: pcpu_freelist_push free_htab_elem htab_map_delete_elem [perf-event BPF 프로그램]
__perf_event_overflow perf_event_nmi_handler exc_nmi
인터럽트된 컨텍스트: __pcpu_freelist_push pcpu_freelist_push free_htab_elem htab_map_delete_elem [raw_tp/sys_enter BPF 프로그램]
__bpf_trace_sys_enter do_syscall_64
raw_res_spin_lock()은 동일한 CPU의 재귀적 잠금 획득을 감지하고 -EDEADLK를 반환하지만, 이후 대체 루프는 하나의 가능한 CPU를 가진 시스템에서 후보 헤드가 없습니다.
rqspinlock 변환 전에 존재했던 추가적인 대체(head) 헤드를 복원합니다. 현재-CPU 고속 경로를 유지한 후, 다른 가능한 CPU들을 시도하고 마지막으로 추가 헤드를 사용합니다. 이 추가 헤드는 미리 할당된 요소를 잃지 않고 실패할 수 없는 push 작업이 인터럽트된 컨텍스트에 의해 잠겨 있는 유일한 per-CPU 헤드가 있을 때도 진전을 이루도록 합니다.
또한 pop 경로에서 추가 헤드를 확인하여 해당 위치에 배치된 노드들이 재사용되도록 합니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.