CVE-2026-90236 in Linux
Riassunto
di VulDB • 18/09/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
NFSD: Rilasciare il riferimento all'export durante l'eliminazione degli stateid di apertura (open)
nfs4_put_stid() rilascia il svc_export tracciato in nfs4_stid.sc_export, ma free_ol_stateid_reaplist() libera gli open e lock stateid chiamando direttamente ->sc_free(), aggirando tale percorso. Uno stato di apertura (open stateid) acquisisce un riferimento sc_export in nfs4_open() e uno stato di blocco (lock stateid) ne acquisisce uno proprio in init_lock_stateid(); entrambi raggiungono free_ol_stateid_reaplist() attraverso il loro normale processo di chiusura: lo open stateid tramite release_open_stateid() e il lock stateid tramite nfsd4_release_lockowner(), ciascuno passando per put_ol_stateid_locked(). Il riferimento non viene quindi mai rilasciato, mantenendo l'export in uso (pinning) e bloccando lo smontaggio (unmount) per tutta la durata dello stato.
Rilasciare sc_export in free_ol_stateid_reaplist() nel modo in cui fa nfs4_put_stid(). ->sc_free() viene eseguito una sola volta per ogni stateid, e uno stateid raggiunge free_ol_stateid_reaplist() o nfs4_put_stid(), ma mai entrambi; di conseguenza il riferimento viene rilasciato esattamente una volta. Gli stateid revocati raggiungono questo percorso con sc_export già azzerato da drop_stid_export(), quindi vengono saltati invece di essere liberati due volte (double-free).
nfs4_put_stid() legge attualmente sc_export prima di acquisire cl_lock. drop_stid_export() cancella tale campo e rilascia il riferimento sotto cl_lock, pertanto una revoca concorrente potrebbe causare il rilascio dell'export nella finestra temporale tra la lettura e l'ultimo put (put), liberando lo stesso riferimento due volte. Leggere sc_export mentre cl_lock è detenuto in modo che i due percorsi vengano serializzati e il riferimento venga rilasciato esattamente una volta.
If you want to get best quality of vulnerability data, you may have to visit VulDB.