CVE-2026-98558 in Linux
요약
\~에 의해 VulDB • 2026. 10. 18.
리눅스 커널에서 다음 취약점이 해결되었습니다:
net: dev_cpu_dead()에서 skb_defer_nodes 플러시하기
CPU가 오프라인으로 전환될 때, dev_cpu_dead()는 해당 CPU의 softnet 큐(completion_queue, output_queue, poll_list, process_queue 및 input_pkt_queue)를 비우지만 net_hotdata.skb_defer_nodes는 그대로 둡니다.
만약 oldcpu가 skb_defer_nodes 목록에 대기 중인 skbs(예: sysctl_skb_defer_max >> 1 IPI 임계값 이하 또는 IPI와 CPU teardown 간 레이스 컨디션 발생 시)를 보유하고 있는 상태에서 오프라인으로 전환되면, 해당 skbs는 oldcpu가 다시 온라인이 될 때까지 고립된 상태로 남습니다. 이러한 skbs 중 page_pool fragments를 보유하는 경우, oldcpu가 오프라인 상태일 때 netdev 또는 드라이버가 제거(page_pool_destroy())될 때 inflight 페이지의 반환을 무한정 기다리며 page_pool_destroy()가 중단됩니다.
또한 kick_defer_list_purge()에서 smp_call_function_single_async() 호출이 대상 CPU가 오프라인으로 전환되어 실패할 경우, defer_ipi_scheduled를 0으로 재설정하여 CPU가 다시 온라인이 되었을 때 향후 IPI 킥(blocking)이 차단되지 않도록 합니다.
마지막으로 oldcpu가 해당 NUMA 노드의 마지막 온라인 CPU인 경우, 그 노드의 슬롯을 모든 CPU에서 비워야 합니다. 이는 대기 중인 skbs가 유휴 원격 CPU에 고립되거나(또는 노드 자체가 이후 오프라인으로 전환될 때) 잔류하는 것을 방지하기 위함입니다.
마지막으로 skb_attempt_defer_free()에서는 cpu_online(cpu)를 다시 확인하고, llist_add() 호출 후 콜러가 CPU 마이그레이션을 수행했는지 여부를 검사하여, 만약 그렇다면 노드 목록을 플러시합니다. 이는 CPU/노드 teardown에 대한 preemption TOCTOU(시간-체크 이후 사용) 레이스 컨디션을 해결하기 위함입니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.