CVE-2026-89655 in Linux
Riassunto
di VulDB • 11/09/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
ceph: correzione di un Use-After-Free (UAF) in __kick_flushing_caps() quando l'elemento cf viene liberato durante sblocco
list_for_each_entry() itera su ci->i_cap_flush_list ma rilascia i_ceph_lock per inviare messaggi cap. Durante la finestra di rilascio del lock, handle_cap_flush_ack() può acquisire i_ceph_lock, staccare gli elementi cf con tid <= flush_tid dalla lista, rilasciare i_ceph_lock e liberarli tramite ceph_free_cap_flush() al di fuori di qualsiasi lock. Quando il thread originale riacquisisce i_ceph_lock e la macro del ciclo for avanza tramite cf = list_next_entry(cf, i_list), viene effettuato un dereferencing su cf->i_list.next su memoria già libera.
La sequenza temporale della race condition:
__kick_flushing_caps() handle_cap_flush_ack() ----------------------- ----------------------- detiene i_ceph_lock <--- itera fino a cf (tid=10) prepara messaggio FLUSH rilascia i_ceph_lock <--- __send_cap() ── FLUSH(tid=10) MDS invia FLUSH_ACK(tid=10) ---> acquisisce i_ceph_lock cf->tid(10) <= flush_tid(10), stacca cf da i_cap_flush_list rilascia i_ceph_lock ceph_free_cap_flush(cf) <- lo libera! acquisisce i_ceph_lock <--- il ciclo for avanza: cf = list_next_entry(cf, i_list) -- UAF su cf->i_list.next già liberato
L'elemento cf era stato appena inviato da __kick_flushing_caps stesso tramite __send_cap(). L'MDS potrebbe rispondere con FLUSH_ACK abbastanza rapidamente in modo che handle_cap_flush_ack() liberi cf prima che __kick_flushing_caps possa completare l'iterazione.
Correzione mediante conversione a un ciclo while manuale: salvare il puntatore next sotto i_ceph_lock prima di rilasciarlo, quindi utilizzare il puntatore salvato dopo la riacquisizione, in modo che il cf potenzialmente liberato non venga mai più accesso.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.