CVE-2022-49740 in LinuxИнформация

Сводка

по VulDB • 28.05.2026

В предоставленном дампе KASAN (Kernel Address Sanitizer) и стеке вызовов видна классическая ошибка **use-after-free** или **out-of-bounds write/read** в драйвере Broadcom USB (`brcmfmac`).

### Краткий анализ проблемы

1. **Тип ошибки:** KASAN указывает на доступ к памяти, которая была помечена как "freed" (освобожденная). В дампе памяти видно, что область вокруг "buggy address" заполнена паттерном `0xfc` (KASAN redzone), что означает, что доступ произошел **за пределами выделенного буфера** или к уже освобожденной памяти. 2. **Кэш памяти:** `kmalloc-2k` (размер 2048 байт). 3. **Место выделения:** `brcmf_setup_wiphybands` -> `brcmf_cfg80211_attach` -> `brcmf_attach` -> `brcmf_usb_probe`. * Это означает, что память была выделена при инициализации устройства (probe). 4. **Место ошибки (Crash):** В конце сообщения указано `Crash Report from brcmf_enable_bw40_2g()`. * Функция `brcmf_enable_bw40_2g` пытается использовать память, которая была выделена ранее, но, судя по всему, она уже освобождена или повреждена.

### Возможные причины

1. **Use-After-Free (UAF):** * Структура `brcmf_pub` или связанная с ней память была освобождена (например, при отключении устройства, ошибке инициализации или сбросе), но функция `brcmf_enable_bw40_2g` все еще пытается к ней обратиться. * Это может произойти, если есть гонка между `brcmf_usb_probe` (инициализация) и `brcmf_usb_disconnect` (отключение), или если ошибка в более раннем этапе привела к частичному освобождению ресурсов, но выполнение продолжилось.

2. **Out-of-Bounds Write/Read:** * Функция `brcmf_enable_bw40_2g` записывает или читает данные за пределы выделенного буфера размером 2048 байт. * Ошибка может быть в вычислении смещения или размера копируемых данных.

3. **Проблема с инициализацией:** * Если `brcmf_setup_wiphybands` не завершилась успешно, но указатели на выделенную память не были обнулены, последующие вызовы могут обращаться к неинициализированной или освобожденной памяти.

### Рекомендации по исправлению

#### 1. Проверить `brcmf_enable_bw40_2g` - Убедитесь, что все указатели, используемые в этой функции, валидны. - Проверьте, не происходит ли доступ к памяти после того, как она была освобождена в другом контексте (например, в `brcmf_disconnect` или при ошибке в `brcmf_attach`). - Добавьте проверки на `NULL` перед использованием указателей.

#### 2. Проверить жизненный цикл памяти в `brcmf_attach` и `brcmf_cfg80211_attach` - Убедитесь, что память, выделенная в `brcmf_setup_wiphybands`, корректно освобождается только тогда, когда устройство полностью отключено и больше не будет использоваться. - Если есть возможность ошибки в `brcmf_attach`, убедитесь, что все выделенные ресурсы освобождаются в случае неудачи (cleanup path).

#### 3. Проверить гонки (Race Conditions) - Если устройство может быть отключено во время инициализации, убедитесь, что `brcmf_usb_disconnect` корректно останавливает все рабочие потоки и освобождает ресурсы, а `brcmf_usb_probe` проверяет, не было ли отключения, прежде чем продолжать.

#### 4. Включить дополнительные проверки KASAN - Если это возможно, запустите ядро с `kasan=on` и `slub_debug=FZP` для более точного определения момента освобождения памяти. - Используйте `CONFIG_KASAN_GENERIC` и `CONFIG_KASAN_OUTLINE` для лучшего покрытия.

### Пример кода для проверки (псевдокод)

```c // В brcmf_enable_bw40_2g if (!pub || !pub->wiphy)

If you want to get best quality of vulnerability data, you may have to visit VulDB.

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

Linux

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

27.03.2025

Раскрытие

27.03.2025

Модерация

принято

Вход

VDB-301702

EPSS

0.00187

KEV

Нет

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

Очень низкий

Источники

Do you know our Splunk app?

Download it now for free!