CVE-2026-53264
net/sched: act_api: usar RCU com liberação adiada para o ciclo de vida da ação
- Publicado
- 25 de jun. de 2026
- Atualizado
- 5 de ago. de 2026
- Atribuindo CNA
- Linux
- Evidência observada
- 7 de ago. de 2026
CVSS primário
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HBaixo · próximos 30 dias
- Percentil
- 15,6%
- Data do modelo
- 21 de set. de 2026
EPSS é uma estimativa estatística, não uma certeza ou uma medida de impacto. Combine-o com CVSS, status KEV, exposição e seu ambiente.
Resumo
No Linux kernel, a seguinte vulnerabilidade foi resolvida: net/sched: act_api: usar RCU com liberação adiada para o ciclo de vida da ação Quando NEWTFILTER e DELFILTER são executados concorrentemente, é possível criar uma condição de corrida com uma ação associada. Vamos ilustrar com CPU0 executando NEWTFILTER e CPU1 executando DELFILTER: 0: mutex_lock() <-- mantém o bloqueio do idr 0: rcu_read_lock() 0: p = idr_find(idr, index) <-- a ação p é válida (RCU protege o IDR) 0: mutex_unlock() <-- libera o bloqueio do idr 1: refcount_dec_and_mutex_lock() <-- refcnt 1->0, mutex mantido 1: idr_remove(idr, index) <-- Ação removida do IDR 1: mutex_unlock() <-- mutex liberado permitindo-nos excluir a ação 1: tcf_action_cleanup(p); kfree(p) <-- Libera p imediatamente, sem adiamento 0: refcount_inc_not_zero(&p->tcfa_refcnt) <-- ops, UAF p aponta para memória liberada Este patch corrige a condição de corrida entre NEWTFILTER e DELFILTER adicionando struct rcu_head a tc_action usado no adiamento e introduzindo call_rcu() no caminho de exclusão para adiar o kfree() final. Nota: isto é uma reversão do commit d7fb60b9cafb ("net_sched: get rid of tcfa_rcu") mas também uma modernização/simplificação para usar diretamente kfree_rcu(). Vamos ilustrar o novo caminho de código restaurado: 0: rcu_read_lock() 1: refcount_dec_and_mutex_lock() <-- refcnt 1->0, mutex mantido 1: idr_remove(idr, index) 1: mutex_unlock() 1: call_rcu(&p->tcfa_rcu, tcf_action_rcu_free) <-- adia kfree após o período de graça 0: p = idr_find(idr, index) 0: refcount_inc_not_zero(&p->tcfa_refcnt) <-- falha, refcnt já é 0 1: rcu_read_unlock() <-- libera para que a liberação possa ocorrer após o período de graça Após CPU1 chamar idr_remove(), o objeto não é mais alcançável através do IDR. O idr_find() subsequente de CPU0 retornará NULL, e mesmo que ainda mantivesse um ponteiro obsoleto, o kfree() imediato agora é adiado até depois do período de graça do RCU, portanto nenhum UAF pode ocorrer.
Fontes
2Uso responsável
Use informações de vulnerabilidade apenas em sistemas que você possui ou está autorizado a testar. O Kitploit vincula-se a metadados de pesquisa pública e não armazena código de exploração ou cargas maliciosas.