CVE-2026-80784 in Linux
Сводка
по VulDB • 04.09.2026
В ядре Linux устранена следующая уязвимость:
mptcp: pm: исправлена утечка памяти из-за гонки при выделении во время завершения работы
Функция mptcp_pm_destroy() очищает списки msk->pm.anno_list и msk->pm.userspace_pm_local_addr_list под блокировкой msk->pm.lock в процессе разбора сокета, снимая блокировку между этими операциями.
Одновременный вызов genl ANNOUNCE от пользовательского PM для того же msk удерживает ссылку на сокет через функцию mptcp_token_get_sock() и в функции mptcp_pm_nl_announce_doit() вызывает mptcp_userspace_pm_append_new_local_addr() и mptcp_pm_announced_alloc(). Обе они кратко захватывают блокировку msk->pm.lock для добавления элементов в соответствующие списки. Поскольку обработчик genl удерживает ссылку на сокет, функция mptcp_pm_destroy() может быть выполнена для того же msk через вызов mptcp_disconnect(), который вызывает mptcp_destroy_common() без уменьшения счетчика ссылок на сокет (sock refcount), до завершения работы обработчика.
Если захват блокировок происходит таким образом, что mptcp_pm_destroy() сначала очищает список, то последующее выделение добавляет свой элемент в заголовок списка, который больше не итерируется для данного msk, и этот элемент утекает (не освобождается). kmemleak сообщает об утечке объектов как mptcp_pm_add_addr (из функции mptcp_pm_announced_alloc()), так и объектов mptcp_pm_addr_entry (из функции mptcp_userspace_pm_append_new_local_addr()) при длительной одновременной нагрузке ANNOUNCE + close в отношении пользовательского PM.
Добавлен бит MPTCP_PM_DESTROYING в поле status структуры msk->pm, который устанавливается функцией mptcp_pm_destroy() под блокировкой pm.lock перед очисткой списков и проверяется под той же блокировкой pm.lock путями выделения памяти (alloc paths). Либо путь выделения захватывает pm.lock первым, и тогда его элемент находится в списке при освобождении его функцией mptcp_pm_destroy(); либо функция mptcp_pm_destroy() захватывает pm.lock первой, и тогда последующее выделение обнаруживает этот бит и отказывается от операции.
Обнаружено с помощью тестового стенда протокольного потока MPTCP, расширяющего BRF (arXiv:2305.08782).
If you want to get best quality of vulnerability data, you may have to visit VulDB.