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.

책임이 있는

Linux

예약하다

2026. 09. 11.

모더레이션

수락

항목

VDB-402547

EPSS

0.00000

출처

Might our Artificial Intelligence support you?

Check our Alexa App!