🇰🇷 한글 설명
Linux 커널의 SUNRPC 구성 요소에서 NFS 콜백 서비스가 파괴되기 전에 백채널이 적절히 닫히지 않아 발생하는 취약점입니다. 서비스 종료 과정에서 레이스 컨디션(Race Condition)이 발생하여 메모리 누수나 이미 해제된 서비스 객체에 대한 잘못된 참조가 발생할 수 있습니다.
💡 쉬운 설명
컴퓨터 시스템이 종료되는 과정에서 데이터 통로를 제대로 닫지 않아 발생하는 오류입니다. 이로 인해 시스템의 메모리가 낭비되거나 시스템이 예기치 않게 충돌할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
SUNRPC: close backchannel before destroying callback service
A backchannel receive can complete a request while the NFS callback
service is being torn down. xprt_complete_bc_request() removes the
request from bc_pa_list, drops bc_alloc_count, marks the request in use,
and then asks xprt_enqueue_bc_request() to hand it to the callback
service.
If teardown has already cleared xprt->bc_serv, xprt_enqueue_bc_request()
currently returns without enqueueing or freeing the committed request.
The xprt_get() taken on entry is leaked as well. If the producer wins
the race before bc_serv is cleared, it can also enqueue onto sv_cb_list
after nfs_callback_down() has stopped the callback threads, leaving the
request linked to a svc_serv that is about to be freed.
Close the producer side before callback threads are stopped. Add
xprt_svc_shutdown_bc() to clear xprt->bc_serv under bc_pa_lock, and call
it on callback shutdown and callback-start failure before stopping the
service threads. Requests that lose the NULL transition in
xprt_enqueue_bc_request() are released through the normal backchannel
free path after balancing bc_slot_count. Finally, drain any remaining
sv_cb_list requests after the callback threads have stopped and before
svc_destroy() frees the service.
📍 영향받는 시스템
Linux Kernel (SUNRPC/NFS 관련 모듈 사용 시스템)
⚔️ 공격 벡터
로컬 또는 네트워크를 통한 특정 시점의 레이스 컨디션 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인하십시오.