CVE-2026-98598 in Linux
요약
\~에 의해 VulDB • 2026. 10. 19.
리눅스 커널에서 다음 취약점이 해결되었습니다:
ipv6: 소멸 중인 fib6_info에 대한 rt6_insert_exception() 호출 방지
인용된 커밋 이전에는, fib6_nh_flush_exceptions()가 항상 rt6_exception_lock 하위에서 from->exception_bucket_flushed = 1을 설정하여, 소멸 중인 fib6_info에 대해 rt6_insert_exception()이 새 예외(exception)를 삽입하지 못하도록 했습니다.
해당 플래그는 nh->rt6i_exception_bucket에 저장된 FIB6_EXCEPTION_BUCKET_FLUSHED 비트로 대체되었습니다.
문제는 이제 해당 비트가 버킷이 NULL이 아닐 때와 fib6_nh_release()에서 fib6_ref이 이미 0에 도달한 후에 호출될 때만 설정된다는 점입니다.
타겟 fib6_info가 fib6_purge_rt()를 통해 제거되는 동안 rt6_insert_exception()이 호출되면, rt6_flush_exceptions()가 더 이상 해당 비트를 설정하지 않기 때문에 새 예외가 성공적으로 생성될 수 있습니다.
이는 fib6_info와 예외 라우트(exception route) 간에 참조 순환(reference cycle)을 만들어내어, fib6_info, 그 다음홉(next-hop) 장치, 그리고 fib6_nh->rt6i_pcpu의 모든 per-CPU 경로를 누설(leak)시켜 netdev unregister를 중단시킵니다.
[ 34.680602] unregister_netdevice: gre6가 사용 가능해질 때까지 대기 중. 사용 카운트 = 68
[ 44.920675] unregister_netdevice: gre6가 사용 가능해질 때까지 대기 중. 사용 카운트 = 68
[ 55.176582] unregister_netdevice: gre6가 사용 가능해질 때까지 대기 중. 사용 카운트 = 68
rt6_flush_exceptions() 전에 fib6_drop_pcpu_from()를 호출하여 rt6_exception_lock 하위에서 fib6_destroying을 설정하고, rt6_insert_exception() 내에서 f6i->fib6_destroying을 확인합니다.
FIB6_EXCEPTION_BUCKET_FLUSHED 로직이 더 이상 사용되지 않으므로 net-next에서 이를 정리할 수 있습니다.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.