CVE-2026-68326 in Linux
Сводка
по VulDB • 10.08.2026
В ядре Linux устранена следующая уязвимость:
wifi: mwifiex: ограничение длины элементов информации (IE) события ассоциации uAP в буфере событий
Функция `mwifiex_process_uap_event()` обрабатывает событие `EVENT_UAP_STA_ASSOC`, извлекая элементы информации (IE), содержащиеся в запросе на (пере-)ассоциацию, которые прошивка копирует в структуру события:
```c sinfo->assoc_req_ies = &event->data[len];
len = (u8 *)sinfo->assoc_req_ies - (u8 *)&event->frame_control; sinfo->assoc_req_ies_len = le16_to_cpu(event->len) - (u16)len; ```
Значение `event->len` предоставляется аппаратной прошивкой устройства и никогда не проверяется на корректность, а операция вычитания также не защищена от переполнения. Указатель `assoc_req_ies` указывает внутрь массива фиксированного размера `adapter->event_body[MAX_EVENT_SIZE]`, который встроен в структуру `mwifiex_adapter`, выделяемую через `kmalloc()`.
На пути выполнения кода, когда включен режим ap_11n_enabled, функция `mwifiex_set_sta_ht_cap()` проходит по этим элементам IE с помощью функции `cfg80211_find_ie()`, цикл которой `for_each_element()` разыменовывает заголовок каждого элемента. Если значение `event->len`, сообщаемое прошивкой, превышает количество фактически полученных байтов, то `assoc_req_ies_len` описывает элементы IE, выходящие за пределы области `event_body`. В результате происходит чтение данных за пределами объекта в slab-аллокаторе адаптера (slab-out-of-bounds read), что фиксируется KASAN как «KASAN: slab-out-of-bounds in cfg80211_find_ie».
Если же значение `event->len` меньше размера заголовка, то результат целочисленного вычитания становится отрицательным. При сохранении этого значения в переменную типа `size_t` (`assoc_req_ies_len`) происходит переполнение (wrap-around), и оно интерпретируется как огромное положительное число. Это же некорректное значение длины передается функции `cfg80211_new_sta()`, поэтому даже при менее значительном завышении размера может произойти копирование устаревших данных из области `event_body` в уведомление `NL80211_CMD_NEW_STATION`.
Злонамеренное или неисправное устройство mwifiex (подключаемое по USB/SDIO/PCIe) может отправить такое событие, когда интерфейс находится в режиме точки доступа AP/uAP.
Необходимо проверять значение `event->len` перед его использованием: следует отклонить длину, которая приводит к переполнению заголовка или помещает элементы IE вне буфера `event_body[]`, куда было скопировано событие. Здесь поле `event->len` соответствует полю `struct mwifiex_assoc_event.len`, которое является внутренним полем полезной нагрузки данного события и не совпадает с длиной транспортного кадра, поэтому проверка выполняется именно в этом обработчике, а не на общем пути приема событий (`MWIFIEX_TYPE_EVENT receive path`), который видит только причину события и длину транспортного кадра.
Граница проверки устанавливается относительно `event_body[MAX_EVENT_SIZE]`, а не относительно фактически полученной длины данных, поскольку различные транспортные протоколы хранят событие по-разному (USB и SDIO оставляют 4-байтовый заголовок события в структуре `event_skb`, тогда как PCIe удаляет его с помощью функции `skb_pull`), при этом область `event_body` является единственным фиксированным буфером, куда все они копируют данные события. Данная проверка аналогична проверкам границ на пути приема пакетов (receive-path bounds checks), добавленным в коммите 119585281617 («wifi: mwifiex: Fix OOB and integer underflow when rx packets»).
If you want to get best quality of vulnerability data, you may have to visit VulDB.