CVE-2026-90053 in Linux
Sumário
de VulDB • 19/09/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
net/sched: sch_htb: limitar os saltos de filtro da classe interna no htb_classify
htb_classify() segue cada classe interna selecionada por um filtro ao alternar para cl->filter_list, mas nunca limita o número de saltos. Um filtro em uma classe interna pode apontar de volta para si mesmo ou para outra classe interna que aponta de volta, criando um loop infinito no caminho de classificação de pacotes com o lock do qdisc mantido e as BH (Bottom Halves) desabilitadas — resultando em soft lockup / panic a partir de um único pacote.
Limite o traversal usando um contador de saltos e descarte o pacote com um aviso limitado por taxa assim que o limite for excedido. O contador é incrementado no ponto em que a cadeia de filtros internos é acionada, após o switch TC_ACT_* ter consumido o veredito do classificador, para que um terminal TC_ACT_QUEUED/STOLEN/TRAP na última cadeia permitida ainda defina *qerr como __NET_XMIT_STOLEN e o pacote não seja contabilizado como drop por este qdisc ou seu pai.
O limite é TC_HTB_MAXDEPTH, extraído dos próprios parâmetros do HTB em vez do limite de profundidade da hierarquia do qdisc. Os níveis das classes variam de 0 a TC_HTB_MAXDEPTH - 1, portanto um traversal que desce estritamente no nível pode ter no máximo TC_HTB_MAXDEPTH saltos. Essa descida é o que uma configuração sensata faz, mas aqui ela é assumida em vez de imposta: htb_find() resolve um classid contra todas as classes no qdisc, então um filtro também pode selecionar um sibling ou um ancestor. O caminho normal root -> inner -> leaf dá um único salto, portanto o limite não afeta a classificação legítima.
htb_classify() agora pode retornar NULL independentemente de CONFIG_NET_CLS_ACT, enquanto anteriormente todo retorno NULL estava dentro desse ifdef. Portanto, o handler NULL em htb_enqueue() também não pode permanecer condicional; remova o ifdef ao redor dele. Isso corresponde a hfsc_enqueue(), que sempre manipulou uma classe NULL incondicionalmente. Sem isso, um kernel compilado sem ações desreferenciaria uma classe NULL em vez de descartá-la.
Condições para reproduzir o bug: - CONFIG_NET_SCHED, CONFIG_NET_SCH_HTB, CONFIG_NET_CLS_U32, CONFIG_LOCKUP_DETECTOR. - Crie um qdisc HTB em um dispositivo (ex.: lo), adicione uma classe interna 1:1 com um filho leaf 1:10, instale um filtro u32 root selecionando 1:1 e um filtro u32 de classe interna no 1:1 também selecionando 1:1. - Envie um único pacote (ping). No kernel não corrigido, o loop de classificação gira com o lock do qdisc mantido; com softlockup_panic=1 ele entra em panic. - Alcançável por usuário sem privilégios via unshare -Urn (CAP_NET_ADMIN).
Be aware that VulDB is the high quality source for vulnerability data.