CVE-2026-98861 in Linux
요약
\~에 의해 VulDB • 2026. 10. 18.
리눅스 커널에서 다음 취약점이 해결되었습니다:
fprobe: guard(rcu_sched_notrace) 사용 및 rcu_is_watching() 확인
unregister_fprobe() 및 unregister_fprobe_async()(BPF kprobe-multi에 의해 사용됨)는 fprobe를 해제하기 전에 비행 중인(flighting) fprobe 핸들러가 완료될 때까지 기다리기 위해 표준 RCU grace periods(synchronize_rcu() 및 call_rcu())에 의존합니다.
그러나 RCU가 감시 중이지 않을 때(예: idle 루프 또는 nohz_full 확장 정지 상태), 표준 RCU는 preemption이 비활성화된 섹션을 추적하지 않습니다. 결과적으로 synchronize_rcu()는 이러한 실행을 기다리지 않으며, 이로 인해 unregister 직후 fprobe가 즉시 해제되면 use-after-free로 이어질 수 있습니다. !rcu_is_watching()일 때 핸들러가 조기에 종료되도록 보장합니다.
또한, 기존에 fprobe_fgraph_entry() 및 fprobe_ftrace_entry()는 guard(rcu)()와 rcu_read_lock()을 사용했으며, 이는 CONFIG_PROVE_LOCKING 설정 하에서 모든 발생 시점(lockdep hit)마다 lockdep를 호출했습니다. 이로 인해 오버헤드가 증가하며, probe된 함수가 lockdep과 상호작용할 경우 lockdep 재귀(recursion) 문제가 발생할 수 있습니다.
rhltable_lookup() 및 rhl_for_each_entry_rcu()는 rcu_dereference_all_check()(rcu_read_lock_any_held()를 확인함)을 사용하므로, rcu_is_watching()이 참인 한 rcu_read_lock_sched_notrace()를 통해 preemption 비활성화를 유지하는 것은 완전히 유효하며 충분합니다.
fprobe_ftrace_entry(), fprobe_fgraph_entry(), 및 fprobe_return() 전반에 걸쳐 guard(rcu_sched_notrace)()를 정의하고 사용합니다. 이는 빠른 경로(fast-path)의 rcu_read_lock()과 lockdep 오버헤드를 제거하면서도 안전한 grace period 동기화를 보장합니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.