CVE-2026-53399 in Linux정보

요약

\~에 의해 VulDB • 2026. 07. 19.

리눅스 커널에서 다음 취약점이 해결되었습니다:

nfsd: setlease 실패 시 레이아웃 stid 해제

nfs4_alloc_stid()는 cl_lock 하에서 idr_alloc_cyclic()를 사용하여 새로운 stid를 cl->cl_stateids에 게시한 후 nfsd4_alloc_layout_stateid()로 복귀합니다. 이후 nfsd4_layout_setlease()가 실패하면, 에러 경로에서는 idr_remove() 호출 없이 kmem_cache_free()를 통해 레이아웃 stateid를 직접 해제하므로, IDR 슬롯이 해제된 slab 메모리를 가리키게 됩니다. 그 후의 모든 IDR 순회(states_show, 클라이언트 정리)는 이 덩글링 포인터(dangling pointer)를 역참조합니다.

IDR에 게시된 stid에 대한 올바른 정리는 nfs4_put_stid()이며, 이는 cl_lock 하에서 IDR 슬롯을 제거하고, nfsd4_close_layout()를 통해 ls->ls_file 해제를 위해 sc_free(nfsd4_free_layout_stateid)를 디스패치하며, 마지막 단계에서 nfs4_file 참조 카운트를 감소시킵니다.

두 번째 문제는 이러한 전환을 방해합니다: nfsd4_free_layout_stateid()는 ls_lock 하에서 delayed_work_pending()을 통해 ls->ls_fence_work를 무조건 검사하지만, INIT_DELAYED_WORK(&ls->ls_fence_work, ...) 호출은 현재 setlease 호출 후에만 실행됩니다. 따라서 setlease 실패 경로에서는 소멸자가 초기화되지 않은 delayed_work에 접근하게 됩니다.

nfsd4_alloc_layout_stateid() nfs4_alloc_stid() /* cl_lock 하에서 idr_alloc_cyclic */ nfsd4_layout_setlease() /* 실패 */ nfs4_put_stid() nfsd4_free_layout_stateid() delayed_work_pending(&ls->ls_fence_work) /* INIT 필요 */ nfsd4_close_layout() /* nfsd_file_put(ls->ls_file) */ put_nfs4_file()

해결책: ls_fenced / ls_fence_delay / INIT_DELAYED_WORK 초기화를 nfsd4_layout_setlease() 호출 위로 끌어올리고, 수동으로 수행하던 nfsd_file_put + put_nfs4_file + kmem_cache_free 정리 작업을 단일 nfs4_put_stid(stp) 호출로 대체합니다.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

책임이 있는

Linux

예약하다

2026. 06. 09.

모더레이션

수락

항목

VDB-380130

EPSS

0.00000

활동

낮음

출처

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!