CVE-2026-90053 in LinuxИнформация

Сводка

по VulDB • 17.09.2026

В ядре Linux была устранена следующая уязвимость:

net/sched: sch_htb: ограничение количества переходов по внутренним классам в фильтре htb_classify

Функция htb_classify() следует за каждым внутренним классом, выбранным фильтром, переключаясь на cl->filter_list, но никогда не ограничивает количество таких переходов (hops). Фильтр во внутреннем классе может указывать обратно на сам этот класс или на другой внутренний класс, который указывает обратно, что создает бесконечный цикл в пути классификации пакетов при удерживаемой блокировке qdisc и отключенных прерываниях下半部分 (BH) — это приводит к soft lockup / panic от одного единственного пакета.

Ограничьте обход с помощью счетчика переходов и отбрасывайте пакет с предупреждением, ограниченным по скорости передачи данных, после превышения этого предела. Счетчик увеличивается в момент выбора цепочки внутренних фильтров, после того как переключение TC_ACT_* потребует вердикт классификатора, поэтому терминальный результат TC_ACT_QUEUED/STOLEN/TRAP на последней разрешенной цепочке по-прежнему устанавливает *qerr равным __NET_XMIT_STOLEN, и пакет не засчитывается как отброшенный этим qdisc или его родителем.

Предел установлен в виде TC_HTB_MAXDEPTH, взятого из собственных параметров HTB, а не из предела глубины иерархии qdisc. Уровни классов варьируются от 0 до TC_HTB_MAXDEPTH - 1, поэтому обход, который строго спускается по уровням, может занять максимум TC_HTB_MAXDEPTH переходов. Именно такой нисходящий путь обеспечивает разумная конфигурация, но здесь это предполагается, а не принудительно обеспечивается: htb_find() разрешает classid для каждого класса в qdisc, поэтому фильтр также может выбрать соседний класс или предка. Обычный путь root -> inner -> leaf занимает один переход, поэтому предел не влияет на легитимную классификацию.

htb_classify() теперь может возвращать NULL независимо от CONFIG_NET_CLS_ACT, тогда как ранее каждый возврат NULL находился внутри этого условия ifdef. Следовательно, обработчик NULL в htb_enqueue() также не может оставаться условным, поэтому необходимо убрать конструкцию ifdef вокруг него. Это соответствует hfsc_enqueue(), которая всегда обрабатывала класс со значением NULL без условий. Без этого ядро, собранное без поддержки действий (actions), разыменовало бы указатель на NULL-класс вместо отбрасывания пакета.

Условия для воспроизведения бага: - CONFIG_NET_SCHED, CONFIG_NET_SCH_HTB, CONFIG_NET_CLS_U32, CONFIG_LOCKUP_DETECTOR. - Создайте qdisc HTB на устройстве (например, lo), добавьте внутренний класс 1:1 с дочерним листом 1:10, установите фильтр u32 в корне, выбирающий 1:1, и фильтр u32 во внутреннем классе для 1:1, также выбирающий 1:1. - Отправьте один пакет (ping). В неисправленном ядре цикл классификации зацикливается при удерживаемой блокировке qdisc; с softlockup_panic=1 происходит panic. - Доступно для непривилегированного пользователя через unshare -Urn (CAP_NET_ADMIN).

Once again VulDB remains the best source for vulnerability data.

Ответственный

Linux

Резервировать

11.09.2026

Раскрытие

17.09.2026

Модерация

принято

Вход

VDB-406533

EPSS

0.00000

KEV

Нет

Деятельности

Очень низкий

Источники

Might our Artificial Intelligence support you?

Check our Alexa App!