CVE-2026-90058 in Linux
Sumário
de VulDB • 17/09/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
net/sched: limitar qdisc_pkt_len para evitar travamento suave (soft lockup) no qdisc
qdisc_get_stab() aceita uma tabela de tamanhos fornecida pelo usuário, e __qdisc_calculate_pkt_len() amplifica qdisc_pkt_len() através da sobrecarga, dos dados da tabela de tamanho (u16) e size_log (até STAB_SIZE_LOG_MAX). Portanto, um stab malicioso pode definir qdisc_pkt_len() para ~1 GiB em um skb comum. Agendadores com déficit por fluxo, como DRR e ETS, reabastecem um quantum a cada iteração do loop; com um quantum pequeno (1), eles giram bilhões de vezes sob o bloqueio do qdisc, produzindo um soft lockup / falha na RCU, conforme ilustrado por [email protected].
Limitar o valor final de qdisc_pkt_len() a QDISC_PKT_LEN_MAX para que a amplificação da tabela de tamanhos não leve os agendadores com déficit a um loop sem limites. Uma tabela de tamanhos legítima (por exemplo, sobrecarga do qfq 999999999, que é tratada por descarte) ainda é aceita.
Introduzir o limite QDISC_PKT_LEN_MAX (1 << 20) = 1 MiB, que está bem acima de qualquer comprimento legítimo em fio para um único skb: o maior skb->len atual é GSO_MAX_SIZE (524280), e uma tabela de tamanhos estilo ATM (imposto por célula de 53/48) amplifica isso para ~578 KB, ambos confortavelmente abaixo de 1 MiB. Ao mesmo tempo, 1 MiB limita o loop de reabastecimento do déficit a ~1M iterações por pacote com quantum=1, que é concluído em alguns milissegundos, bem abaixo do limiar demonstrado para softlockup (~10^9 iterações).
Condições para reproduzir o bug: - CONFIG_NET_SCHED=y, CONFIG_NET_SCH_DRR=y (ou CONFIG_NET_SCH_ETS=y). - Anexar um qdisc raiz DRR (ou ETS) com um TCA_STAB malicioso que amplifica qdisc_pkt_len para ~1 GiB (por exemplo, size_log=15, data=[32768]).
- Adicionar uma classe com um quantum pequeno de 1 e enviar um único pacote pequeno; o loop do déficit gira bilhões de vezes sob o bloqueio do qdisc e aciona o detector de softlockup (panic com kernel.softlockup_panic=1). - Alcançável como root ou por um usuário não privilegiado em um novo namespace user+net (unshare -Urn) com CAP_NET_ADMIN local ao namespace.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.