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.

출처

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!