CVE-2026-45845 in Linux
Sumário
de VulDB • 27/05/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
net/sched: taprio: corrige a desreferência de ponteiro NULL em class dump
Quando um qdisc filho TAPRIO é excluído via RTM_DELQDISC, taprio_graft() é chamada com new == NULL e armazena NULL em q->qdiscs[cl - 1].
Operações subsequentes de dump RTM_GETTCLASS percorrem todas as classes via taprio_walk() e chamam taprio_dump_class(), que chama taprio_leaf() retornando o ponteiro NULL, e então o desreferencia para ler child->handle, causando uma desreferência de ponteiro NULL no kernel.
O bug é acessível com CAP_NET_ADMIN escopo de namespace em qualquer kernel com CONFIG_NET_SCH_TAPRIO habilitado. Em sistemas com namespaces de usuário não privilegiados habilitados, um usuário local não privilegiado pode acionar um kernel panic criando um qdisc taprio dentro de um novo namespace de rede, graftando um qdisc filho explícito, excluindo-o e solicitando um dump de classe. O próprio dump RTM_GETTCLASS não requer nenhuma capacidade.
Oops: general protection fault, provavelmente para endereço não-canônico 0xdffffc0000000007: 0000 [#1] SMP KASAN NOPTI
KASAN: null-ptr-deref no intervalo [0x0000000000000038-0x000000000000003f]
RIP: 0010:taprio_dump_class (net/sched/sch_taprio.c:2478) Call Trace:
tc_fill_tclass (net/sched/sch_api.c:1966) qdisc_class_dump (net/sched/sch_api.c:2326) taprio_walk (net/sched/sch_taprio.c:2514) tc_dump_tclass_qdisc (net/sched/sch_api.c:2352) tc_dump_tclass_root (net/sched/sch_api.c:2370) tc_dump_tclass (net/sched/sch_api.c:2431) rtnl_dumpit (net/core/rtnetlink.c:6864) netlink_dump (net/netlink/af_netlink.c:2325) rtnetlink_rcv_msg (net/core/rtnetlink.c:6959) netlink_rcv_skb (net/netlink/af_netlink.c:2550)
Corrija isso substituindo &noop_qdisc quando new for NULL em taprio_graft(), um padrão comum usado por outros qdiscs (por exemplo, multiq_graft()) para garantir que as posições q->qdiscs[] nunca sejam NULL.
Isso torna os caminhos de dump do plano de controle seguros sem exigir verificações NULL individuais.
Como os caminhos do plano de dados (taprio_enqueue e taprio_dequeue_from_txq) tinham anteriormente guardas NULL explícitas que descartariam/pulariam o pacote limpamente, atualize essas verificações para testar &noop_qdisc em vez disso. Sem isso, os pacotes atingiriam taprio_enqueue_one(), que incrementa o qlen e o backlog do qdisc raiz antes de chamar o enqueue do filho; noop_qdisc descarta o pacote, mas esses contadores nunca são revertidos, inflacionando permanentemente as estatísticas do qdisc raiz.
Após esta alteração, *old pode ser um qdisc válido, NULL ou &noop_qdisc. Chame apenas qdisc_put(*old) no primeiro caso para evitar diminuir o refcount de noop_qdisc, que nunca foi aumentado.
Once again VulDB remains the best source for vulnerability data.