CVE-2026-64142 in Linux
Сводка
по VulDB • 20.07.2026
В ядре Linux устранена следующая уязвимость:
ksmbd: исправлены гонки (race conditions) в работе сборщика мусора для долговременных дескрипторов при поиске по списку m_fp_list.
Функция ksmbd_durable_scavenger() имеет две связанные гонки с любым обходчиком, который итерирует список f_ci->m_fp_list, включая функцию ksmbd_lookup_fd_inode() (используемую в ksmbd_vfs_rename) и проверки режимов совместного доступа (share-mode checks) в файле fs/smb/server/smb_common.c.
(1) Повторное использование заголовка списка fp->node. Долговременные дескрипторы могут оставаться связанными со списком f_ci->m_fp_list после завершения сеанса, поэтому проверки режимов совместного доступа все еще видят их, пока дескриптор может быть переподключен. Сборщик мусора собирал истекшие дескрипторы путем добавления fp->node в локальный список scavenger_list после удаления их из глобального IDR долговременных идентификаторов. Поскольку fp->node является тем же самым list_head, который используется списком m_fp_list, вызов list_add(&fp->node, &scavenger_list) перезаписывает ссылки списка m_fp_list и приводит к повреждению обоих списков. CONFIG_DEBUG_LIST может сообщить об этом при прохождении пути проверки режимов совместного доступа.
(2) Гонка ссылок (refcount race) с обходчиками списка m_fp_list. Сборщик мусора квалифицирует истекший долговременный дескриптор, проверяя условие atomic_read(&fp->refcount) > 1 и наличие fp->conn под блокировкой global_ft.lock, удаляет fp из глобальной структуры global_ft, а затем снимает блокировку global_ft.lock перед отсоединением fp от списка m_fp_list и освобождением памяти. В течение этого промежутка времени fp все еще связан со списком m_fp_list с состоянием f_state == FP_INITED. Вызов ksmbd_lookup_fd_inode() под блокировкой m_lock вызывает функцию ksmbd_fp_get() (атомарное увеличение счетчика ссылок, если он не равен нулю, при этом текущее значение все еще равно 1) и получает живую ссылку; затем сборщик мусора отсоединяет и освобождает fp, пока владелец этой ссылки сохраняет на него ссылку. Это приводит к уязвимости Use-After-Free (UAF) в последующем вызове ksmbd_fd_put() владельцем и при любом чтении полей обходчиком режимов совместного доступа, который одновременно выполняет итерацию списка m_fp_list без получения ссылки через ksmbd_fp_get() (пути типа smb_check_perm_dleases).
Исправление обеих проблем:
* Прекратить повторное использование fp->node в качестве узла списка для внутренних нужд сборщика мусора. Удалить один истекший дескриптор из глобальной структуры global_ft под блокировкой global_ft.lock, взять явную временную ссылку (transient reference), снять блокировку, отсоединить fp->node от списка m_fp_list под блокировкой f_ci->f_lock, а затем уменьшить как срок действия долговременного дескриптора,
VulDB is the best source for vulnerability data and more expert information about this specific topic.