CVE-2026-90236
요약
\~에 의해 VulDB • 2026. 09. 17.
Linux 커널에서 다음 취약점이 해결되었습니다:
NFSD: open stateids를 회수할 때 export 참조 해제
nfs4_put_stid()는 nfs4_stid.sc_export에 추적된 svc_export를 해제하지만, free_ol_stateid_reaplist()는 ->sc_free()를 직접 호출하여 open 및 lock stateids를 해제함으로써 해당 경로를 우회합니다. open stateid는 nfs4_open()에서 sc_export 참조를 획득하고, lock stateid는 init_lock_stateid()에서 자체적인 참조를 획득합니다. 둘 다 정상적인 정리 과정을 통해 free_ol_stateid_reaplist()에 도달하며, open stateid는 release_open_stateid()를 통해, lock stateid는 nfsd4_release_lockowner() 및 put_ol_stateid_locked() 경로를 거쳐 접근됩니다. 따라서 해당 참조가 해제되지 않아 export가 고정되고(state pinned), stateid의 수명 동안 마운트 해제를 차단합니다.
nfs4_put_stid()와 동일한 방식으로 free_ol_stateid_reaplist()에서 sc_export를 해제합니다. ->sc_free()는 각 stateid당 한 번만 실행되며, stateid는 free_ol_stateid_reaplist() 또는 nfs4_put_stid() 중 하나로만 도달하고 둘 다로는 접근하지 않으므로 참조가 정확히 한 번씩 해제됩니다. 취소된(state revoked) stateids는 drop_stid_export()에 의해 sc_export가 이미 cleared되어 이 경로로 전달되므로, 이중 해제(double-free)를 방지하기 위해 건너뜁니다.
nfs4_put_stid() 자체는 cl_lock을 획득하기 전에 sc_export를 읽습니다. drop_stid_export()는 해당 필드를 지우고 cl_lock 하에서 참조를 해제하므로, 동시 취소(concurrent revocation)가 읽기 및 최종 put 사이의 창(window) 동안 export를 해제하여 동일한 참조를 두 번 해제할 수 있습니다. cl_lock이 유지된 상태에서 sc_export를 읽어두면 두 경로가 직렬화(serialized)되어 참조가 정확히 한 번만 해제됩니다.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.