CVE-2026-89708 in Linux
요약
\~에 의해 VulDB • 2026. 09. 11.
리눅스 커널에서 다음 취약점이 해결되었습니다:
nfsd: 세션 종료 시 use-after-free를 수정하기 위해 cl_cb_session에 RCU 보호 적용
DESTROY_SESSION 이후, 세션별 정리 경로(routine)는 rpciod가 아직 진행 중인 콜백 rpc_task(clp->cl_cb_session을 역참조함)를 보유하고 있는 동안 세션을 해제할 수 있습니다. nfsd4_probe_callback_sync()은 cl_callback_wq를 플러시하지만, nfsd4_run_cb_work()이 rpc_call_async()를 호출한 후 rpc_task는 rpciod에서 계속 존재합니다. 따라서 작업 큐(workqueue)를 플러싱해도 이를 기다리지 않습니다. rpc_shutdown_client()는 rpciod 작업을 드레인하지만 1초의 wait_event_timeout을 사용하므로, rpc_delay()에 고정된 작업(예: NFS4ERR_DELAY 재시도를 위한 2초 대기 등)은 드레인 기간보다 더 오래 생존할 수 있습니다.
destroy path rpciod ------------ ------ unhash_session(ses) nfsd4_probe_callback_sync(clp) flush_workqueue(cl_callback_wq) /* 반환됨; rpc_task는 여전히 활성 상태 */ nfsd4_put_session_locked(ses) free_session(ses) -> kfree(ses) nfsd4_cb_sequence_done() reads cb_clp->cl_cb_session /* 해제된 슬랩(freed slab) 접근 */
nfsd4_process_cb_update()에도 두 번째 윈도우(취약점 구간)가 존재합니다. __nfsd4_find_backchannel()이 unhash_session()에 의해 이미 파괴된 세션이 cl_sessions에서 제거되었기 때문에 NULL을 반환할 때, setup_callback_client()는 v4.1 조기 리턴 경로를 취하므로 clp->cl_cb_session = ses 할당이 실행되지 않고 해당 필드는 해제되려 하는 세션을 가리키는 포인터를 유지합니다.
두 가지 문제를 모두 해결하기 위해 cl_cb_session을 RCU 보호된 포인터로 변환했습니다:
- setup_callback_client()에서 cl_cb_session = ses 할당을 rpc_create() 성공 이후로 이동하여, 작동하는 백채널(backchannel)이 존재할 때만 게시되도록 합니다. nfsd4_process_cb_update()의 오류 반환 시 cl_cb_session을 지웁니다. 두 저장 모두 rcu_assign_pointer()를 사용합니다.
- cl_cb_session에 __rcu 주석을 붙입니다. 모든 rpciod 측 리더는 rcu_read_lock()/rcu_dereference()를 사용하고 NULL인지 확인한 후 적절한 오류 또는 재큐 경로로 분기합니다: encode_cb_sequence4args(), decode_cb_sequence4resok(), nfsd41_cb_get_slot(), nfsd41_cb_release_slot(), nfsd4_cb_prepare(), 및 nfsd4_cb_sequence_done().
- __free_session()에서 kfree() 대신 kfree_rcu()를 사용하여 세션 슬랩이 RCU 그레이스 기간 이후까지 회수되지 않도록 보장함으로써, rcu_read_lock() 내부의 rpciod 리더들이 해제된 메모리를 역참조하지 않음을 확실히 합니다.
- nfsd_cb_seq_status 및 nfsd_cb_free_slot 트레이스포인트에 cl_cb_session을 다시 읽는 대신 세션 포인터를 전달합니다.
- nfsd4_cb_prepare()는 세션이 NULL일 때 rpc_exit()를 호출하여, 완료/릴리스 경로를 통해 콜백을 재큐합니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.