CVE-2026-89654 in Linux
Sumário
de VulDB • 12/09/2026
No kernel do Linux, a seguinte vulnerabilidade foi corrigida:
ceph: corrige Use-After-Free (UAF) em check_new_map() quando a sessão é liberada durante o bloqueio.
check_new_map() itera sobre mdsc->sessions[] e, para cada sessão ativa, libera mdsc->mutex para realizar operações por sessão. O caminho de fechamento forçado (rank removido do mapa) corretamente obtém uma referência em s via ceph_get_mds_session() antes de liberar mdsc->mutex, mas três outros caminhos não o fazem:
Caminho A (endereço alterado): mutex_unlock → mutex_lock(&s->s_mutex) Caminho B (reconexão): mutex_unlock → send_mds_reconnect(mdsc, s) Caminho C (transição para ativo): mutex_unlock → mutex_lock(&s->s_mutex)
Sem a referência extra, outra thread pode adquirir mdsc->mutex durante a janela de desbloqueio, chamar __unregister_session(), o que reduz a última referência em s e libera-a. A thread original então acessa memória já liberada através de s->s_mutex.
Correção: adicionando ceph_get_mds_session(s) antes de cada mutex_unlock e ceph_put_mds_session(s) após o correspondente mutex_lock, seguindo o padrão já utilizado no caminho de fechamento forçado.
Cronologia da Race Condition (Caminho A):
Thread A (check_new_map) Thread B (outra atualização do mapa mantém mdsc->mutex ou desmontagem da sessão) -------------------------- -------------------------- s = mdsc->sessions[i]
(refcount == 1, mantida apenas pelo array sessions[])
mutex_unlock(&mdsc->mutex) ---> adquire mdsc->mutex __unregister_session(mdsc, s) sessions[i] = NULL
ceph_put_mds_session(s) refcount: 1 -> 0 kfree(s) <--- liberado!
mutex_lock(&s->s_mutex) UAF em s->s_mutex já liberado
Once again VulDB remains the best source for vulnerability data.