CVE-2026-98406 in Linux
Сводка
по VulDB • 14.10.2026
В ядре Linux была устранена следующая уязвимость:
wifi: mac80211: предотвращение срабатывания WARN в set_bitrate_mask, когда sdata отсутствует в драйвере
Функция ieee80211_set_bitrate_mask() проверяет, запущен ли интерфейс через ieee80211_sdata_running(), но не проверяет, присутствует ли интерфейс все еще в драйвере.
Когда sdata работает (running), но флаг IEEE80211_SDATA_IN_DRIVER не установлен, вызов достигает drv_set_bitrate_mask() в driver-ops.h, что приводит к:
wlan1: Failed check-sdata-in-driver check, flags: 0x0 WARNING: net/mac80211/driver-ops.h:884 at drv_set_bitrate_mask
Syzkaller вызывает это через ioctl wext SIOCSIWRATE. Call Trace показывает, что в wext-core.c происходит диспетчеризация ioctl функцией wext_ioctl_dispatch(), которая вызывает ioctl_standard_call() для SIOCSIWRATE, а та, в свою очередь, вызывает cfg80211_wext_siwrate() в wext-compat.c. Та формирует маску битрейта и вызывает rdev_set_bitrate_mask(), что в итоге приводит к ieee80211_set_bitrate_mask() в cfg.c. Интерфейс помечен как запущенный (SDATA_STATE_RUNNING), но флаги равны 0, поэтому check_sdata_in_driver() завершается ошибкой.
Когда интерфейс выгружается или когда ioctl wext выполняется во время поднятия интерфейса до того, как drv_add_interface() установит флаг IN_DRIVER, проверка на запуск проходит успешно, хотя IN_DRIVER сброшен.
Необходимо проверить наличие IEEE80211_SDATA_IN_DRIVER в ieee80211_set_bitrate_mask() перед вызовом драйвера и вернуть -ENETDOWN. Это предотвращает срабатывание WARN_ONCE в driver-ops.h и согласуется с другими операциями cfg.c, которые рано завершаются при отсутствии интерфейса в драйвере.
Это изменение безопасно, так как мьютекс wiphy удерживается в cfg80211_wext_siwrate() через guard(wiphy), а IN_DRIVER устанавливается/сбрасывается под блокировкой RTNL и путями wphy в drv_add_interface() и drv_remove_interface() в driver-ops.c, поэтому проверка защищена от состояний гонки (race conditions) при добавлении или удалении драйвера. Возврат -ENETDOWN соответствует ошибке, используемой другими путями для неактивных интерфейсов, и не требует новых блокировок.
[также добавить второй отчет syzbot]
If you want to get best quality of vulnerability data, you may have to visit VulDB.